Java 多模式DDL外键生成不使用Hibernate

Java 多模式DDL外键生成不使用Hibernate,java,hibernate,orm,schema,hibernate-mapping,Java,Hibernate,Orm,Schema,Hibernate Mapping,我部署oracle数据库并创建2个模式 核心 msg c_用户表位于核心中,我想在msg模式中创建m_消息表。 我的申请结构是: 核心项目是一个独立的依赖项,包含在其他项目中,User.hbm.xml就在其中 我将核心项目添加到消息项目的pom.xml中消息项目具有Message.hbm.xml 我使用Hibernate4,我的hibernate映射文件如下所示。当我启动应用程序(消息项目)时,我想使用c\u user表创建外键,该表位于core模式中,但hibernate生成的DDL是

我部署oracle数据库并创建2个模式

  • 核心
  • msg
c_用户
表位于核心中,我想在msg模式中创建
m_消息
表。
我的申请结构是:

  • 核心项目是一个独立的依赖项,包含在其他项目中,
    User.hbm.xml
    就在其中
  • 我将核心项目添加到消息项目的
    pom.xml
    消息项目具有
    Message.hbm.xml
我使用Hibernate4,我的hibernate映射文件如下所示。当我启动应用程序(消息项目)时,我想使用
c\u user
表创建外键,该表位于core模式中,但hibernate生成的DDL是错误的。我认为hibernate无法在非模式属性的
User.hbm.xml
中设置默认的模式属性
注意。我不想在
User.hbm.xml
中添加模式属性,因为核心项目已添加到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>
休眠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>
为什么
msg.c_用户
?为什么hibernate不能为没有模式属性的表设置默认的_模式
我认为使用默认_模式生成外键的顺序是:

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

我怎样才能更改订单?非常感谢…

这很可能是一个bug。然而,即使是这样,它也不会在Hibernate4中被修复

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


然而,生产数据库依赖HBM2DDL是一个更大的问题。HBM2DDL适用于测试和原型设计,而不适用于生产环境。您应该使用来管理数据库架构。

我认为问题在于,您正在将值传递给属性文件,但它没有加载到hibernate配置XML文件中。看看这个:@holmicz谢谢你的重播。但在我的Hibernate配置XML文件中,它是OK和Debug TyScript。我不知道,您是否正在使用Spring,但是如果是的话,请考虑一下。您是否也尝试过将User.hbm.xml中的schema设置为core,以查看它是否工作?然后扔掉message.hbm.xml中的“msg”模式,看看默认模式是否放在那里?我测试了这个场景。当User.hbm.xml具有“核心”架构,而Message.hbm.xml没有“msg”架构时,hibernate会在核心架构中添加消息表,这意味着默认的_架构正在工作。但是使用这些属性的顺序是不同的。。!感谢您的重播,我用hibernate 5.2测试了这个场景,如果存在,那么我创建了一个问题。你关于环境的句子是正确的。当然,谢谢。请在尝试复制问题时使用。
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
<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>
alter table msg.m_message add constraint FK_filpe81gwdf3f6oqn54d5ybh3 
foreign key (sender_Id) references msg.c_user