gpt4 book ai didi

java - 多模式 DDL 外键生成不适用于 Hibernate

转载 作者:行者123 更新时间:2023-11-30 02:39:20 25 4
gpt4 key购买 nike

我部署 Oracle 数据库并创建 2 个架构

  • 核心
  • 消息

c_user 表位于 core 中,我想在 msg 架构中创建 m_message 表。
我的应用程序结构是:

  • Core-Project 是一个独立的依赖项,包含在其他项目中,并且 User.hbm.xml 位于其中。
  • 我将Core-Project添加到Message-Projectpom.xml中。 消息项目Message.hbm.xml

我使用 hibernate 4,我的 hibernate 映射文件如下所示。当我启动我的应用程序(消息项目)时,我想使用 m_message 创建外键,该表位于 core 架构中,但由 hibernate 生成DDL 是错误的。我认为 hibernate 无法在 User.hbm.xml 中设置 default_schema 属性,该属性不是 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 生成外键的顺序是:

  • 1) 使用 User.hbm.xml 的架构,如果不存在
  • 2) 使用 Message.hbm.xml 的架构,如果不存在
  • 3)使用oracle-hibernate.properties的default_schema

如何更改此订单?非常感谢...

最佳答案

这很可能是一个错误。然而,即使是这样,它也不会在 Hibernate 4 中得到修复。

如果您可以使用 Hibernate 5.2 复制它,那么您应该打开一个新的 Jira 问题,该问题将得到解决。

但是,生产数据库依赖 HBM2DDL 是一个更大的问题。 HBM2DDL 适合测试和原型(prototype)设计,但不适合生产环境。您应该使用 Flyway管理您的数据库架构。

关于java - 多模式 DDL 外键生成不适用于 Hibernate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42242428/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com