我的课程ActivityLink
从Activity
延伸。 ActivityLink
有private Activity link;
属性,我不想要触摸表Activity
,但我想创建第二个表ActivityLink
。我使用Java 1.7和最新版本的hibernate。
如何通过xml映射在hibernate中实现它?
public class ActivityLink extends Activity implements Serializable {
private static final long serialVersionUID = 1L;
private Activity link;
public ActivityLink( Activity link ){ this.link = link; }
// getter en setter
}
public class Activity implements Serializable {
private static final long serialVersionUID = 1L;
private String identity;
public Character precision;
public Date requestedTime;
public Date effectiveTime;
public String performerId;
public Date schedulerTime;
public Double fractionQty;
public Short UserId;
public Double totalVolume;
public Double restVolume;
public Activity() { }
// getter en setter
}
Activity.hbm.xml文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
<class name="de.j2ee.order.ActivityLink"
table="order_db..ActivityLink">
<composite-id class="de.j2ee.order.PK" name="pk">
<key-property name="identity" column="Identity_" access="field"/>
</composite-id>
<version name="version" column="Version_" access="field" type="java.lang.Long"/>
<property name="identity" column="Identity_" update="false" insert="false"/>
<property name="precision" column="Precision_"/>
<property name="requestedTime" column="RequestedTime_"/>
<property name="effectiveTime" column="EffectiveTime_"/>
<property name="performerId" column="PerformerId_"/>
<property name="schedulerTime" column="SchedulerTime_"/>
<property name="fractionQty" column="FractionQty_"/>
<property name="userId" column="UserId_"/>
<property name="totalVolume" column="TotalVolume_"/>
<property name="restVolume" column="RestVolume_"/>
<union-subclass name="de.j2ee.order.ActivityLink" table="order_db..Activity">
<property name="link" />
</union-subclass>-->
</class>
</hibernate-mapping>
答案 0 :(得分:0)
如果要对Activity
和ActivityLink
使用单个表,则必须使用Table Per Class层次结构策略。请点击以下链接了解详情:
10.1.1. Table per class hierarchy
所以你的映射应该是这样的:
<class name="Activity" table="Activity">
<id name="identity" column="Identity">
</id>
<discriminator column="ACTIVITY_TYPE" type="string"/>
<subclass name="ActivityLink" discriminator-value="Activity_Link">
...
</subclass>
</class>
<强>更新强>
如果您想为子类ActivityLink
创建一个表,那么您需要使用以下策略:
例如:
<class name="Activity" table="Activity">
<id name="identity" column="Identity">
</id>
<joined-subclass name="ActivityLink" table="Activity_Link">
<key column="Activity_ID"/>
...
</joined-subclass>
</class>