2010-11-09 85 views
0

我有一个大脑痉挛试图找出这个映射。Hibernate与自动表格多对一的连接表映射

这里是我的分贝:

CUSTOMER    CUSTOMERFAMILY    CUSTOMER 
PK SITE_ID -----------PRIMARYSITE_ID    -- PK SITE_ID 
         MEMBERSITE_ID -------------| 

这将创建一个关系,其中一个客户只能有一个父(因为有上CUSTOMERFAMILY.MEMBERSITE_ID独特的约束)和一个客户可以有许多儿童。 (即百事公司拥有FritoLay,佳得乐等,所以百事可乐有几个孩子,但佳得乐只有一个母公司:百事公司)。

我试图映射称为父在我的客户对象的属性,我已经试过这种想法的许多组合没有成功:

<join table="CUSTOMERFAMILY" inverse="false"> 
    <key column="MEMBERSITE_ID" unique="true" /> 
    <many-to-one name="parent" column="SITE_ID" not-null="true"><formula>PRIMARYSITE_ID</formula></many-to-one> 
</join> 

任何想法?

在此先感谢。

(请不要问为什么数据库设计这种方式...原有系统,那不是我!;))

回答

2

假设你有

private Customer parent; 
private Set<Customer> children; 

映射看起来像这个:

<set name = "children" table = "CUSTOMERFAMILY">    
    <key column="PRIMARYSITE_ID" /> 
    <many-to-many column = "MEMBERSITE_ID" entity-name="package.Customer" /> 
</set> 

<join table="CUSTOMERFAMILY" inverse="true"> 
    <key column="MEMBERSITE_ID" /> 
    <many-to-one name="parent" column = "PRIMARYSITE_ID" /> 
</join> 
+0

非常好!谢谢!这工作,现在,如果我想使用命名查询来加载客户,我得到一个错误PRIMARYSITE_ID:无效标识符 – 2010-11-10 21:56:59