在为同一个实例运行的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'中生成序列,例如...任何帮助?
答案 0 :(得分:0)
我为最常见的Hibernate DDL生成策略提供了blog post:
第二种方法更灵活,特别是如果你想混合JPA Entity Model with jOOQ Table Model。
毋庸置疑,这只是一个集成测试问题,因为对于生产环境,我们使用Flyway。因此,您不应该依赖Hibernate来管理数据库模式,因为它更具风险,灵活性更低,并且与CI和CD无法很好地协作。