0

問題の概要

複合キーを使用して多対 1 をマップしようとしています。これまでのところ、役立つ別の質問を見つけることができませんでした。1 対 1 で複合キーにマップする方法は知っていますが、多対 1 にマップすることはできません。

以下では、bhrvJournalDAO に store_nbr 列があり、transAcctgBuTxtDAO acctg_bu_id にマップされていることがわかります。複合キーを押して、acctgBuId のみを使用するように指示するにはどうすればよいですか? 国コード (複合キーの 2 番目の部分) がありません。

ここから

<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])

前もって感謝します

4

1 に答える 1

0

TransAcctgBuTxtDAO には 2 つの列の複合 ID があるため、1 つのエンティティである期間を一意に識別するために両方の値を指定する必要があります。BhrvJournalDAO と TransAcctgBuTxtDAO の間の関係が本当に多対 1 であるかどうかを再考することができます。まあ、それは実際には多対多です。

于 2013-04-01T03:52:42.403 に答える