2012-05-07 28 views
0

これまでは、これが私の "Activity"テーブルのマップです。このテーブルは、ContactテーブルとContactテーブルにリンクするCONTACT_IDとACCOUNT_IDを格納しています。このようHibernateマッピング - 多対1の関係

<many-to-one 
    name="accountObj" 
    class="my.com.miramax.crm.account.db.Account" 
    not-null="false" 
    not-found="ignore" 
    insert="false" 
    update="false" 
    column="ACCOUNT_ID" 
/> 

enter image description here

今私は、この表には、ACCOUNT_IDとCONTACT_IDをenter image description here 以下

のようなテーブルを格納していませんが、それは "Table_REF" と「REF_IDに分け"たとえば、TABLE_REF = "Account"およびREF_ID = 239は、Account_ID = 239と同じです。

私はこのテーブルをどのようにマップすればいいのですか?私はそれらを区別してDAOで検索するために使用できますか?

私を助けてください。前もって感謝します。

答えて

0

次のマッピングを試すことができます。 これは、対応するテーブルにIDが存在するかどうかに基づいて入力します。次のクエリを使用して、データを適切に読み込むことができます。私に

"from Activity activity left outer join activity.account ac with tableref='Account' left outer join activity.contact con with tableref='Contact'" 

------------ 

<many-to-one name="account" 
column="REF_ID" 
insert="false" 
update="false" 
lazy="no-proxy" 
not-found="ignore" 
> 
</many-to-one> 

<many-to-one name="contact" 
column="REF_ID" 
insert="false" 
update="false" 
lazy="no-proxy" 
not-found="ignore" 
> 
</many-to-one> 
+0

私はhibernateに新しいです、私はhbm.xmlでクエリを適用するためにどこでも見ることができません、あなたは私に詳細を教えてくださいできますか?どうもありがとう。 – user998405

0

、それは<any>のための典型的なケースのように聞こえる:

<any name="referenceObj" id-type="long" meta-type="string"> 
    <meta-value value="Account" class="my.com.miramax.crm.account.db.Account"/> 
    <meta-value value="Contact" class="..."/> 
    <column name="TABLE_REF"/> 
    <column name="REF_ID"/> 
</any> 

reference documentationを参照してください。

+0

DAOのによって作成されたreferenceObjをどのように適用すればよいか分かりましたか?私は、アカウントテーブルをフィルタリングする検索をしたい。通常、私はDAOでこれを行うことができます - "criteria.createAlias(CostCentre.PROP_CONTACT_OBJ、CostCentre.PROP_CONTACT_OBJ、Criteria.LEFT_JOIN);" – user998405