簡體   English   中英

如何跳過超類表的模式生成? Java/JPA/休眠/注釋/Maven/hbm2ddl

[英]How to skip the schema generation of a superclass table? Java/JPA/Hibernate/Annotations/Maven/hbm2ddl

我們的應用程序需要與另一個本地運行的應用程序共享現有的數據庫表,因此,我希望引用該表但跳過為其生成 DDL。 我還希望將應用程序架構中的表定義為別名或 MySQL 合並表,但我可以將其添加到將在生成的架構腳本之前運行的手動腳本中。

如何指定從 myapp-schema-ddl.sql output 中省略 shared_schema 表的創建和更改表 DDL?

從 commons/src/main/java/com/company/shared/SharedSuperEntity.java:

@Entity
@Table(name="shared_entity", catalog = "shared_schema")
@Inheritance(strategy = InheritanceType.JOINED)
public class SharedSuperEntity {
    // fields, etc...
}

從 myapp/src/main/java/com/company/shared/SharedSuperEntity.java:

@Entity
@Table(name="local_entity", catalog = "local_schema")
public class LocalEntity extends SharedSuperEntity {
    // fields, etc...
}

從 myapp/src/main/resources/META_INF/persistence.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="MyAppPU" transaction-type="JTA">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <jta-data-source>java:/LocalDS</jta-data-source>
    <class>com.company.shared.SharedSuperEntity</class>
    <class>com.company.myapp.LocalEntity</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <shared-cache-mode>NONE</shared-cache-mode>
    <validation-mode>AUTO</validation-mode>
    <properties>
        <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect" />
        <property name="hibernate.bytecode.use_reflection_optimizer" value="false" />
        <property name="hibernate.default_batch_fetch_size" value="4" />
        <property name="hibernate.default_entity_mode" value="pojo" />
        <property name="hibernate.generate_statistics" value="false" />
        <property name="hibernate.jdbc.batch_size" value="0" />
        <property name="hibernate.jdbc.batch_versioned_data" value="true" />
        <property name="hibernate.jdbc.fetch_size" value="0" />
        <property name="hibernate.jdbc.use_get_generated_keys" value="false" />
        <property name="hibernate.jdbc.use_scrollable_resultset" value="false" />
        <property name="hibernate.jdbc.use_streams_for_binary" value="false" />
        <property name="hibernate.hibernate.max_fetch_depth" value="3" />
        <property name="hibernate.order_updates" value="true" />
        <property name="hibernate.query.substitutions" value="true 1, false 0, yes 'Y', no 'N'" />
        <property name="hibernate.use_identifer_rollback" value="true" />
        <property name="hibernate.use_outer_join" value="false" />
        <property name="hibernate.use_sql_comments" value="false" />
        <property name="hibernate.id.new_generator_mappings" value="true" />
    </properties>
</persistence-unit>

從 myapp/pom.xml 中:

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>hibernate3-maven-plugin</artifactId>
            <version>2.2</version>
            <configuration>
                <components>
                    <component>
                        <name>hbm2ddl</name>
                        <implementation>jpaconfiguration</implementation>
                    </component>
                </components>
                <componentProperties>
                    <persistenceunit>MyAppPU</persistenceunit>
                    <outputfilename>myapp-schema-ddl.sql</outputfilename>
                    <drop>false</drop>
                    <create>true</create>
                    <export>false</export>
                    <format>true</format>
                    <jdk5>true</jdk5>
                </componentProperties>
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-core</artifactId>
                    <version>3.6.0.Final</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate</groupId>
                    <artifactId>hibernate-entitymanager</artifactId>
                    <version>3.6.0.Final</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>org.hibernate.javax.persistence</groupId>
                    <artifactId>hibernate-jpa-2.0-api</artifactId>
                    <version>1.0.0.Final</version>
                    <scope>compile</scope>
                </dependency>
                <dependency>
                    <groupId>mysql</groupId>
                    <artifactId>mysql-connector-java</artifactId>
                    <version>5.1.16</version>
                    <type>jar</type>
                    <scope>compile</scope>
                </dependency>
            </dependencies>
        </plugin>

我不認為 Hibernate 直接支持。 您可以創建兩個配置文件:一個列出運行時的所有映射類,另一個省略有問題的 class 以生成模式。 否則,您可能會查看某種后處理,例如 sed 腳本,以便在事后刪除 DDL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM