簡體   English   中英

Hibernate在數據庫表中創建多個外鍵以進行雙向關聯

[英]Hibernate creates multiple foreign keys in database tables for bidirectional associations

我要創建具有相應關聯的下表: 在此處輸入圖片說明

但是,似乎我已經模仿了一些東西,因為當Hibernate創建表時,會創建多個外鍵,如下所示:

INFO:HHH10001501:從JdbcConnectionAccess [org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator$ConnectionProviderJdbcConnectionAccess@5e5595f3]獲得的連接不在自動提交模式下; 連接“本地事務”將被提交,並且連接將被設置為自動提交模式。

休眠:創建表APP.ITEMS(默認情況下以身份生成ITEM_ID整數,NAME varchar(100),NET_PRICE整數,VAT_RATE整數,CATEGORY_ID整數不為空,主鍵(ITEM_ID))

休眠:創建表APP.LIMIT(LIMIT_ID整數不為null,LIMIT_VALUE整數,主鍵(LIMIT_ID))

休眠:創建表APP.PARTNER(PARTNER_ID整數默認生成為標識,PARTNER_NAME varchar(100),主鍵(PARTNER_ID))

休眠狀態:創建表APP.TRANSACTIONS(默認情況下以身份標識生成的TRANSACTIONS_ID整數,FLOW整數不為null,NET_PRICE整數,ITEM_ID整數不為空,通知單整數,ADVICENOTE_ID整數不為空,主鍵(TRANSACTIONS_ID))

休眠:更改表APP.TRANSACTIONS添加約束UK_r7btjtpy72nugbhuia8y0xnk6唯一(ITEM_ID)

休眠:更改表APP.ADVICENOTE添加約束FK4n4r6ej5i983gk8fqj20jl899 外鍵(伙伴)引用APP.PARTNER

休眠:更改表APP.ADVICENOTE添加約束FKr96drd4j6pds8vocvsstcd2a2 外鍵(PARTNER_ID)引用APP.PARTNER

休眠:更改表APP.ITEMS添加約束FKbbkng91eiiqu522okqq0nq7pm外鍵(CATEGORY_ID)引用APP.CATEGORIES

休眠:更改表APP.TRANSACTIONS添加約束FK13kk35nfl3iff7f2cs8er8w0s 外鍵(建議)引用APP.ADVICENOTE

休眠:更改表APP.TRANSACTIONS添加約束FK8ilbnqyk8lemxj0yvbqm3p7tt外鍵(ITEM_ID)引用APP.ITEMS

休眠:更改表APP.TRANSACTIONS添加約束FKqrbn7tojjjkjyusy98a300btp 外鍵(ADVICENOTE_ID)引用APP.ADVICENOTE

休眠:從APP.CATEGORIES類別0_中選擇類別0_.NAME作為col_0_0_

休眠:從APP.ITEMS項0_中選擇項0_.ITEM_ID作為ITEM_ID1_2_,項0_.NAME作為NAME2_2_,項0_.NET_PRICE作為NET_PRIC3_2_,項0_.VAT_RATE作為VAT_RATE4_2_,項0_.CATEGORY_ID作為CATEGORY5_2_。

休眠:從APP.ITEMS項0_中選擇項0_.ITEM_ID作為ITEM_ID1_2_,項0_.NAME作為NAME2_2_,項0_.NET_PRICE作為NET_PRIC3_2_,項0_.VAT_RATE作為VAT_RATE4_2_,項0_.CATEGORY_ID作為CATEGORY5_2_。

休眠:從APP.CATEGORIES類別0_中選擇類別0_.NAME作為col_0_0_

休眠:從APP.ITEMS項0_中選擇項0_.ITEM_ID作為ITEM_ID1_2_,項0_.NAME作為NAME2_2_,項0_.NET_PRICE作為NET_PRIC3_2_,項0_.VAT_RATE作為VAT_RATE4_2_,項0_.CATEGORY_ID作為CATEGORY5_2_。

這是正常行為還是我缺少了什么?

這是我的XML映射:

Advicenote.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">
<!-- 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>

Categories.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.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>

Items.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.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>

Limit.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.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>

一個AdviceNote映射JoinColumn丟失

<many-to-one name="partner" class="classes.Partner">
   <join-column name="PARTNER_ID"/>
</many-to-one>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM