当前位置: 首页 > 知识库问答 >
问题:

Hibernate在数据库表中为双向关联创建多个外键

程沛
2023-03-14

但是,我似乎搞错了一些事情,因为当Hibernate创建表时,会创建多个外键,如下所示:

信息:HHH10001501:从JdbcConnectionAccess[org.hibernate.engine.jdbc.env.internal.jdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5E5595F3]获得的用于(非JTA)DDL执行的连接未处于自动提交模式;将提交连接“本地事务”,并将连接设置为自动提交模式。

Hibernate:创建表app.items(默认情况下作为标识生成的ITEM_ID整数,名称varchar(100),NET_PRICE整数,VAT_RATE整数,CATEGORY_ID整数不为空,主键(ITEM_ID))

Hibernate:创建表app.limit(LIMIT_ID整数不为null,LIMIT_VALUE整数,主键(LIMIT_ID))

Hibernate:创建表app.partner(PARTNER_ID整数默认生成为标识,PARTNER_NAME varchar(100),主键(PARTNER_ID))

Hibernate:创建表app.transactions(默认情况下作为标识生成的TRANSACTIONS_ID整数、FLOW整数不为null、NET_PRICE整数、ITEM_ID整数不为null、advicenote整数、ADVICENOTE_ID整数不为null、主键(TRANSACTIONS_ID))

Hibernate:alter table APP.TRANSACTIONS添加约束UK_r7btjtpy72nugbhuia8y0xnk6 unique(ITEM_ID)

Hibernate:alter table app.adviceNote add constraint FK4n4r6ej5i983gk8fqj20jl899 foreign key(partner)references app.partner

Hibernate:alter table app.adviceNote add constraint FKr96drd4j6pds8vocvsstcd2a2外键(PARTNER_ID)引用app.partner

Hibernate:alter table app.items add constraint fkbbkng91eiqu522okqq0nq7pm外键(CATEGORY_ID)引用app.categories

Hibernate:alter table APP.TRANSACTIONS添加约束FK13kk35nfl3iff7f2cs8er8w0s外键(advicenote)引用APP.advicenote

Hibernate:alter table app.transactions add constraint FK8ilbnqyk8lemxj0yvbqm3p7tt外键(ITEM_ID)references app.items

Hibernate:alter table app.transactions add constraint FKqrbn7tojjjkjyusy98a300btp外键(ADVICENOTE_ID)引用app.adviceNote

Hibernate:从app.categories categories0_中选择categories0_.name作为col_0_0_

Hibernate:选择items0_.item_id作为ITEM_ID1_2_,items0_.name作为NAME2_2_,items0_.net_price作为net_pric32_,items0_.vat_rate作为VAT_RATE4_2_,items0_.category_id作为CATEGORY5_2_from app.items items0_

Hibernate:选择items0_.item_id作为ITEM_ID1_2_,items0_.name作为NAME2_2_,items0_.net_price作为net_pric32_,items0_.vat_rate作为VAT_RATE4_2_,items0_.category_id作为CATEGORY5_2_from app.items items0_

Hibernate:从app.categories categories0_中选择categories0_.name作为col_0_0_

Hibernate:选择items0_.item_id作为ITEM_ID1_2_,items0_.name作为NAME2_2_,items0_.net_price作为net_pric32_,items0_.vat_rate作为VAT_RATE4_2_,items0_.category_id作为CATEGORY5_2_from app.items items0_

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Feb 9, 2019, 3:57:52 PM by Hibernate Tools 4.3.1 -->
<hibernate-mapping>
    <class name="classes.Advicenote" table="ADVICENOTE" schema="APP" optimistic-lock="version">
        <id name="advicenoteId" type="int" column="ADVICENOTE_ID">
            <generator class="native" />
        </id>
        <property name="advicedate" type="date" column="ADVICE_DATE" length="10" />
        <property name="inOrOut" type="java.lang.Short" column="IN_OR_OUT" />
        <many-to-one 
            name="partner" class="classes.Partner"/>  
        <set name="transactions" table="TRANSACTIONS" inverse="false" cascade="all" lazy="true" fetch="select">       
            <key column="ADVICENOTE_ID" not-null="true"/>
            <one-to-many class="classes.Transactions"/>
        </set>
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="classes.Categories" table="CATEGORIES" schema="APP" optimistic-lock="version">
        <id name="categoryId" type="int">
            <column name="CATEGORY_ID" />
            <generator class="native" />
        </id>
        <property name="name" type="string">
            <column name="NAME" length="100" />
        </property>
     <set name="items" table="ITEMS" inverse="true" cascade="all" lazy="false" fetch="select">
        <key>
            <column name="CATEGORY_ID" not-null="true" />
        </key>
        <one-to-many class="classes.Items" />
    </set>
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="classes.Items" table="ITEMS" schema="APP" optimistic-lock="version">
        <id name="itemId" type="int" column="ITEM_ID">
            <generator class="native" />
        </id>
        <property name="name" type="string" column="NAME" length="100"/>
        <property name="netPrice" type="java.lang.Integer" column="NET_PRICE"/>
        <property name="vatRate" type="java.lang.Integer" column="VAT_RATE"/>
        <many-to-one name="category" class="classes.Categories" fetch="select" column="CATEGORY_ID" not-null="true" lazy="false"/>
    </class>
</hibernate-mapping>
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="classes.Limit" table="LIMIT" schema="APP" optimistic-lock="version">
        <id name="limitId" type="java.lang.Integer" column="LIMIT_ID">
            <generator class="assigned"/>
        </id>
        <property name="value" type="int" column="LIMIT_VALUE" length="1000"/>
    </class>
</hibernate-mapping>

partner.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="classes.Partner" table="PARTNER" schema="APP">
        <id name="partnerId" type="int">
            <column name="PARTNER_ID"/>
            <generator class="native"/>
        </id>
        <property name="partnerName" type="string" column="PARTNER_NAME" length="100"/>
        <set name="advicenotes" table="ADVICENOTE" inverse="false" cascade="all" lazy="true" fetch="select">
            <key column="PARTNER_ID" not-null="true"/>
            <one-to-many class="classes.Advicenote" />
        </set>
            </class>
</hibernate-mapping>

transactions.hbm.xml

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="classes.Transactions" table="TRANSACTIONS" schema="APP" optimistic-lock="version">
        <id name="transactionsId" type="int" column="TRANSACTIONS_ID">
            <generator class="native" />
        </id>
        <property name="flow" type="int" column="FLOW" not-null="true" />
        <property name="netPrice" type="java.lang.Integer" column="NET_PRICE" />

        <many-to-one name="advicenote" class="classes.Advicenote"/>
        <many-to-one name="item" class="classes.Items" fetch="select" cascade="save-update" column="ITEM_ID" unique="true" not-null="true"/>
    </class>
</hibernate-mapping>

共有1个答案

何向荣
2023-03-14

缺少AdviceNote映射JoinColumn

<many-to-one name="partner" class="classes.Partner">
   <join-column name="PARTNER_ID"/>
</many-to-one>
 类似资料:
  • 1. 前言 通过本节课程的学习,你将发现关联对象之间的微妙关系。相信这种关系对你更深入地认识 HIbernate 有很大的帮助。 通过本节课程,你将了解到: 多对多双向关联映射中哪一方是关系维系者; 级联操作与关系维系者。 2. 关系维系者 新学期开始了,同学们选择了各自喜欢的课程,现在为学生添加选修课程的任务就要落在 Hibernate 的身上。一起来看看 Hibernate 是如何完成这个任务

  • 问题内容: 我正在使用,并且正在尝试运行一个简单的应用程序,尤其是运行在page中描述的应用程序。我的hibernate.cfg.xml文件是: 我(使用maven时)是: 我在链接中使用它: 但是,不可能获得应用程序的工作,即在数据库中hibernate创建表并插入值。无论尝试如何,我总是会收到相同的错误: 在线上的“关系部门不存在”: 我也没有完全相同的错误尝试过。为了抢占某些读者,请不要在数

  • 1. 前言 本节课程和大家一起聊聊一对多关联映射。通过本节课程,你将了解到: 如何实现一对多关联映射; 如何实现双向一对多关联映射; 关联映射中的级联操作。 2. 一对多关联映射 关系型数据库中表与表中的数据存在一对多(或多对一)关系。 如学生表、班级表。一个班级有多个学生,多个学生可以在同一个班级。 一对多或多对一本质上是一样的,如同一块硬币的正面和反面,只是看待事物的角度不同而已。 数据库中有

  • 我是azure databricks的新手,正在尝试创建一个外部表,指向Azure Data Lake Storage(ADLS)Gen-2位置。 我尝试从数据库笔记本设置ADLS访问的火花配置。我仍然无法执行创建的DDL。 注意:一个适合我的解决方案是将ADLS帐户装载到集群,然后使用外部表的DDL中的装载位置。但我需要检查是否可以使用ADLS路径创建一个外部表DDL,而无需安装位置。 数据链路

  • 问题内容: 为什么hibernate对这些类使用联接表? 我既不需要联接表也不需要双向关联:( 问题答案: 因为这是它的设计方式,也是JPA规范要求它映射这样的关联的方式。如果要在广告投放表中添加联接列,请使用 这是有据可查的。

  • 问题内容: http://www.vaannila.com/spring/spring-hibernate- integration-1.html 在阅读本教程时,他们没有提到在数据库中创建表的任何内容。一旦我指定了表和字段,Hibernate会自动处理它吗? 这是我的bean配置。 问题答案: 您的hibernate.hbm2ddl.auto设置应该确定所创建的数据库(选项为,,或者)