我使用hibernate在我的应用程序中创建了Device
表。每个Device
对象包含3种类型的对象,例如SADevicede
,TXDeviceType
,RxDeviceType
。
(即)设备具有SADeviceType,TXDeviceType,RxDeviceType
我的目标是为每个具有用户定义限制的SADevicetype,TXDeviceType和RxDeviceType生成警报。这意味着设备A的 SADeviceType仅应生成重大错误。设备A的 TXDeviceType应仅针对次要错误生成。 设备B的 SADeviceType,TXDeviceType应为主要和次要错误生成警报。
我想在此使用 Table Per class hierarchy 。例如,我想创建AlarmRestrictionDetail类,子类是SAAlarmDetail,TXAlarmDetail和RxAlarmDetail。如果我要通过使用hibernate创建它,如果每个类层次结构中的歧视器作为多对一关系出现,它将如何处理 如何在一个鉴别器列上生成三个外键?
如果这不是一个好主意,当我使用hibernate时,是否有人帮助我哪种表结构最好?
参考代码在
下面 public class Device {
private Integer id;
private List<SADevicetype> saDeviceTypeList;
private List<RxDeviceType> rxDeviceTypeList;
private List<TXDeviceType> txDeviceTypeList;
}
public class AlarmRestrictionDetail {
public Integer id;
public String alarmName;
public String severity;
}
public class SAAlarmDetail extends AlarmRestrictionDetail{
// device type is a discriminator column
public SADevicetype deviceType;
}
public class TXAlarmDetail extends AlarmRestrictionDetail {
// device type is a discriminator column
public TXDeviceType deviceType;
}
答案 0 :(得分:0)
在One Table Per class hierarchy
方法中,如果需要在代码中使用discriminator的值,则可以在映射中使用read-only
属性。
public enum Devicetype {SADevicetype("SA") ,TXDeviceType("TX") ,...}
public class AlarmRestrictionDetail {
public Integer id;
public String alarmName;
public String severity;
public Devicetype deviceType;
}
<class name="AlarmRestrictionDetail " table="AlarmRestrictionDetailTable">
<id name="ID" column="id"/>
<property name="alarmName" column="severity" length="50"></property>
<property name="severity" column="severity" length="50"></property>
<discriminator column="discriminator_column" type="string"/>
<property name="devicetype" column="discriminator_column" access="readonly"/>
<subclass name="SAAlarmDetail " discriminator-value="SA">
<!-- ETC-->
</subclass>
<subclass name="TXAlarmDetail" discriminator-value="TX">
<!-- ETC-->
</subclass>
</class>