2013-03-29 48 views
0

問題摘要多到一個W /複合鍵 - 外國密鑰必須具有相同的列數,因爲他引用PK

我試圖映射多到一個具有複合鍵。到目前爲止,我還沒有找到其他有幫助的問題。我知道如何映射到一對一的複合鍵,但它不允許我映射多對一。

下面你會看到bhrvJournalDAO有一個store_nbr列,它映射到transAcctgBuTxtDAO acctg_bu_id。我怎樣才能擊中組合鍵,並告訴它只使用acctgBuId?我沒有國家代碼(這是組合鍵的第二部分)。

從這裏

<hibernate-mapping> 
<class name="com.acctg.BhrvJournalDAO" table="transpo_acctg:bhrv_journal"> 
    <id name="jeId" column="je_id"> 
     <generator class="native"/> 
    </id> 
    <property name="bhrvInvoiceId" column="bhrv_invoice_id"/> 
    <property name="storeNbr" column="store_nbr"/> 
    <property name="loadId" column="load_id"/> 

    <many-to-one name="transAcctgBuTxt" class="TransAcctgBuTxtDAO" insert="false" update="false" cascade="all"> 
       <column name="store_nbr"></column> 
    </many-to-one> 
</class> 

爲了這裏

<hibernate-mapping> 
<class name="TransAcctgBuTxtDAO" table="transpo_acctg:trans_acctg_bu_txt"> 
    <composite-id name="transAcctgBuTxtPKDAO" class="TransAcctgBuTxtPKDAO"> 
     <key-property name="acctgBuId" column="acctg_bu_id"/> 
     <key-property name="languageCode" column="language_code"/> 
    </composite-id> 
    <property name="acctgBuAbbr" type="java.lang.String"> 
     <column name="acctg_bu_abbr" /> 
    </property> 
    <property name="acctgBuDesc" type="java.lang.String"> 
     <column name="acctg_bu_desc" /> 
    </property> 
    <many-to-one name="transAcctgBuDAO" class="TransAcctgBuDAO" not-null="false" 
     insert="false" update="false" not-found="ignore" fetch="select"> 
     <column name="acctg_bu_id" /> 
    </many-to-one> 
</class> 

映射

<many-to-one name="transAcctgBuTxt" class="TransAcctgBuTxtDAO" 
     insert="false" update="false" cascade="all"> 
       <column name="store_nbr"></column> 
    </many-to-one> 

複合鍵示例

<one-to-one name="transAcctgBuTxt" class="TransAcctgBuTxtDAO" property- 
     ref="transAcctgBuTxtPKDAO.acctgBuId"> 
     <column name = "store_nbr"> 
</one-to-one> 

錯誤

Foreign key (FK47A121BB6617227C:transpo_acct:bhrv_journal [store_nbr])) 
must have same number of columns as the referenced primary 
key (transpo_acct:trans_acctg_bu_txt [acctg_bu_id,language_code]) 

預先感謝

回答

0

由於TransAcctgBuTxtDAO有2列的複合ID,則需要提供兩個值來唯一標識一個實體,句點。也許你可以重新考慮它是否是BhrvJournalDAO和TransAcctgBuTxtDAO之間的多對一關係。 Mabye實際上是多對多的。

+0

@Chin_Hung。這就是我所擔心的。不幸的是,它是一個引用了拒絕表的表格(我們存儲了在BhrvJournal中使用的鍵的定義列表)。我最終只是使用另一個查詢來獲取我需要的。不是最好的方法,但你確認它不適用於我的設置。謝謝你的時間 – zach

相關問題