2012-05-07 85 views
0

以前,这是我如何映射我的“活动”表。此表存储CONTACT_ID和ACCOUNT_ID,该帐号链接到“帐户和联系人”表。 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中使用它进行搜索?

请帮帮我。提前致谢。

回答

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

我是新来的休眠,我无法看到任何地方应用查询在我的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