Hibernate映射 - 多对一关系

时间:2012-05-07 07:24:22

标签: hibernate hibernate-mapping many-to-one

之前,这是我如何映射我的“活动”表。此表存储CONTACT_ID和ACCOUNT_ID,链接到Account和Contact表。 enter image description here

以这种方式

<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,但它分为“Table_REF”和“REF_ID”。例如,TABLE_REF =“Account”和REF_ID = 239与Account表中的Account_ID = 239相同。

任何人都可以告诉我如何映射此表,以便我可以区分它们并在DAO中使用它进行搜索?

请帮帮我。提前谢谢。

2 个答案:

答案 0 :(得分: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>

答案 1 :(得分: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