我有一个像A - AB - B的映射,但AB表也是其他表的连接表(是的,谢谢,没有评论:p)。在AB表中,我有一个CODE(非空)列。
我可以通过在映射中添加where标记来获取正确的数据,但是当我插入值时,Hibernate不会在CODE列中添加值...好吧,我不知道如何告诉Hibernate做什么这一点。
以下是A表的映射以获取Set:
<set name="b" table="AB" lazy="false" where="CODE='1.2.3'">
<key column="A_ID" />
<many-to-many column="B_ID" class="B">
</many-to-many>
</set>
Hibernate创建一个只包含A_ID和B_ID值的插入,我想告诉Hibernate在其SQL INSERT查询中插入CODE ='1.2.3'。
非常感谢你的帮助,
更新
从Java的角度来看,这个想法是在A:getB():Set<B>
中有这样的签名我不想要getAB():Set<AB>
。
由于
答案 0 :(得分:0)
AB
使用两个类{} ID
ABIdClass(A_ID,B_ID)
,另一个类Code
(和所有额外列)ABClass(CODE)
并使用{{1}常量值列的属性:
default
你也可以尝试这样的事情:
<class name="ABClass" table="AB">
<composite-id name="id" class="ABIdClass">
<key-many-to-one name="a" class="A" column="a_id" />
<key-many-to-one name="b" class="B" column="b_id" />
</composite-id>
<property name="code" type="string">
<column name="code" not-null="false" default="1.2.3" />
<property/>
</class>
答案 1 :(得分:0)
您应该能够使用Hibernate Table per Class Hierarchy方法实现您的目标。
abstract class Mapping { private String code; }
class TableA {}
class TableB {}
class TableAB extends Mapping { private TableA a; private TableB b; }
class TableC {}
class TableD {}
class TableCD extends Mapping { private TableC c; private TableD d; }
class TableE {}
class TableF {}
class TableEF extends Mapping { private TableE e; private TableF f; }
<class name="TableA" table="tableA"/>
<class name="TableB" table="tableB"/>
<class name="TableC" table="tableC"/>
<class name="TableD" table="tableD"/>
<class name="TableE" table="tableE"/>
<class name="TableF" table="tableF"/>
<class name="Mapping" table="mapping">
<discriminator column="CODE" type="string"/>
<subclass name="TableAB" discriminator-value="1.2.3">
<property name="a" column="a_id"/>
<property name="b" column="b_id"/>
</subclass>
<subclass name="TableCD" discriminator-value="4.5.6">
<property name="c" column="a_id"/>
<property name="d" column="b_id"/>
</subclass>
<subclass name="TableEF" discriminator-value="7.8.9">
<property name="e" column="a_id"/>
<property name="f" column="b_id"/>
</subclass>
</class>
请注意,列a_id
和b_id
对于所有关系都是通用的。这将确保单个映射表可以根据需要用于不同的关系。