Hibernate自带表与连接表映射多对一

时间:2010-11-09 19:31:42

标签: java hibernate orm

我有一个脑痉挛试图找出这个映射。

这是我的db:

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

这会创建一个关系,其中Customer只能拥有一个父级(因为CUSTOMERFAMILY.MEMBERSITE_ID存在唯一约束)并且Customer可以拥有多个子级。 (即百事公司拥有FritoLay,Gatorade等,因此百事公司将有几个孩子,但Gatorade只有一个父母:PepsiCo)。

我正在尝试在我的Customer对象中映射一个名为parent的属性,我尝试了很多这种想法的组合而没有成功:

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

任何想法??

提前致谢。

(请不要问为什么数据库是这样设计的......遗留系统,不是我!))

1 个答案:

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