2
我必须创建复杂的Hibernate映射。以下简单的例子解释了我的问题。映射的Hibernate映射,其中键是复值的一部分
我有两个实体:
public class Work {
private WorkType type;
private Set<Workers>;
...
}
public class Worker {
private Map<WorkType,Work>;
...
}
我有3个表:
t_works columns: id, type,...
t_workers columns: id,...
t_work_worker columns: worker_id, work_id.
我想与休眠的地图,而不复制类型值t_work_worker。 这里的问题是地图键(WorkType)是地图值(Work)的一部分。
我的休眠HBM:
<typedef class="org.hibernate.type.EnumType" name="workType">
<param name="enumClass">myPackage.WorkType</param>
<param name="type">12</param>
</typedef>
<class name="work" table="T_WORKS">
<property name="type" type="workType" column="type"/>
<set name="workers" table="T_WORK_WORKER" inverse="true" lazy="false" cascade="none">
<key column="WORK_ID" />
<many-to-many column="WORKER_ID"class="myPackage.Worker"/>
</set>
</class>
<class name="Worker" table="T_WORKERS">
<map name="channels" table="T_WORK_WORKER" lazy="false" cascade="all">
<key column="WORKER_ID" />
<map-key formula="(select w.TYPE from t_works w where w.ID=WORK_ID)"type="workType"/>
<many-to-many column="WORK_ID" class="myPackage.Work"/>
</map>
</class>
这种映射工作,但需要额外的select语句(见formula
属性附加伤害)。 我想知道是否有办法将工作类型映射为关键字,而不使用“公式”,也没有向关系表中添加类型列。