我部署oracle数据库并创建2个架构
c_user
表位于核心中,我想在 msg 架构中创建m_message
表。
我的申请结构是:
User.hbm.xml
就在其中。 pom.xml
。 消息项目有Message.hbm.xml
。我使用hibernate 4,我的hibernate映射文件就像下面的东西。当我启动我的应用程序(Message-Project)时,我想用m_message
创建具有核心模式的c_user
表的外键,但是hibernate生成的DDL是错误的。我认为hibernate不能在User.hbm.xml
中设置不是schema属性的default_schema属性!
注意。我不想在User.hbm.xml
中添加架构属性,因为 Core-Project 已添加到10个以上的项目中。
Message.hbm.xml
<class name="org.message.model.Message" table="m_message" schema="msg">
<many-to-one name="sender" column="sender_Id" entity-name="org.core.model.User" not-null="true" />
...
</class>
核心项目中的User.hbm.xml
<class name="org.core.model.User" table="c_user">
...
</class>
oracle-hibernate.properties
hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver
hibernate.connection.url=jdbc:oracle:thin:@localhost:1521:HRM
hibernate.connection.username=msg
hibernate.connection.password=msg
hibernate.connection.internal_logon=normal
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.hbm2ddl_auto=update
hibernate.default_schema=core
hibernate XML配置文件
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource_" ref="dataSource_" />
<property name="hibernateProperties">
<props>
<prop key="hibernate.default_schema"> ${hibernate.default_schema}</prop>
...
</props>
</property>
</bean>
hibernate为外键生成DDL,如下所示:
alter table msg.m_message add constraint FK_filpe81gwdf3f6oqn54d5ybh3
foreign key (sender_Id) references msg.c_user
为什么msg.c_user
?为什么hibernate不能为没有schema属性的表设置default_schema?
我认为使用default_schema生成外键的顺序是:
User.hbm.xml
的架构然后如果不存在Message.hbm.xml
的架构然后如果不存在我该如何更改此订单?非常感谢...
答案 0 :(得分:2)
很可能这是一个错误。但是,即使它是,它也不会在Hibernate 4中修复。
如果您可以使用Hibernate 5.2复制它,那么您应该打开一个新的Jira问题,问题将得到解决。
但是,依赖于生产数据库的HBM2DDL更是一个问题。 HBM2DDL适用于测试和原型设计,不适用于生产环境。您应该使用FlywayDB来管理数据库架构。