我有一个脑痉挛试图找出这个映射。
这是我的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>
任何想法??
提前致谢。
(请不要问为什么数据库是这样设计的......遗留系统,不是我!))
答案 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>