如何在Hibernate中限定序列名?

时间:2014-11-07 17:35:06

标签: java hibernate oracle11g hbm2ddl

在为同一个实例运行的oracle数据库生成序列时,我遇到了麻烦,具有相同的数据结构。这是我persistence.xml的一个片段,我根据持久性单元定义了不同的模式:

<persistence-unit name="oracle_development" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
        <property name="hibernate.connection.charSet" value="UTF-8" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="false" />
        <property name="hibernate.connection.autocommit" value="false" />
        <property name="hibernate.ejb.entitymanager_factory_name"
            value="o11g" />
        <property name="hibernate.default_schema" value="devdatabase"/>
    </properties>
</persistence-unit>

<persistence-unit name="oracle_production" transaction-type="RESOURCE_LOCAL">
    <provider>org.hibernate.ejb.HibernatePersistence</provider>
    <properties>
        <property name="hibernate.archive.autodetection" value="class" />
        <property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect" />
        <property name="hibernate.hbm2ddl.auto" value="update" />
        <property name="hibernate.ejb.naming_strategy" value="org.hibernate.cfg.ImprovedNamingStrategy" />
        <property name="hibernate.connection.charSet" value="UTF-8" />
        <property name="hibernate.show_sql" value="false" />
        <property name="hibernate.format_sql" value="false" />
        <property name="hibernate.connection.autocommit" value="false" />
        <property name="hibernate.ejb.entitymanager_factory_name"
            value="o11g" />
        <property name="hibernate.default_schema" value="proddatabase"/>
    </properties>
</persistence-unit>

嗯,一旦创建命令中的表名包含默认模式作为限定符,表就会生成完美。但是,如果已经在'devdatabase'上创建了序列,则不会在'proddatabase'中生成序列,例如...任何帮助?

1 个答案:

答案 0 :(得分:0)

我为最常见的Hibernate DDL生成策略提供了blog post

  1. 如果您计划添加函数或执行一些自定义脚本,hibernate.hbm2ddl.auto =“update”很方便但不太灵活。
  2. 最灵活的方法是使用“org.hibernate.tool.ant.HibernateToolTask​​”生成DDL脚本,然后使用组件在上下文启动时执行脚本。当Spring上下文关闭时,将调用destroy脚本。
  3. 第二种方法更灵活,特别是如果你想混合JPA Entity Model with jOOQ Table Model

    毋庸置疑,这只是一个集成测试问题,因为对于生产环境,我们使用Flyway。因此,您不应该依赖Hibernate来管理数据库模式,因为它更具风险,灵活性更低,并且与CICD无法很好地协作。