当前位置: 首页 > 知识库问答 >
问题:

在Hibernate中,我们可以在每个类层次结构的表中使用鉴别器作为多对一关系吗

归俊
2023-03-14

我使用hibernate在我的应用程序中创建了< code>Device表。每个< code >设备对象包含3种类型的对象,如< code>SADevicede 、< code>TXDeviceType 、< code>RxDeviceType。(ie)设备包含SADeviceType、TXDeviceType、RxDeviceType列表

我的目标是使用用户定义的限制为每个SADevicetype、TXDeviceType和RxDeviceType生成警报。这意味着设备A的SADeviceType只应为重大错误生成。设备A的TXDeviceType应仅为小错误生成。设备B的SADeviceType、TXDEVICETETYPE应针对主要和次要错误生成警报。

我想在这里使用每个类的表层次结构。例如,我想创建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;
  }

共有1个答案

蔺敏达
2023-03-14

在< code >每个类层次结构一个表方法中,如果您需要在代码中包含discriminator的值,可以在映射中使用< code >只读属性。< br >

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>
 类似资料:
  • 我有一个基于hibernate策略的实体层次结构,并且我在application.yml中设置了。 当我使用h2db运行测试时,我得到“null not allowed for column”。 当指令创建形状表时,它将鉴别器列设置为,因此得到“null not allowed for column”。 是否有一种方法可以使用DDL-AUTO强制区分器列为null?

  • 问题内容: 我具有实现的接口层次结构。我想使用不可变的对象,所以我想设计一些类来方便地构造这些对象。但是,我有很多接口,并且我不想在每种类型的子生成器中重复构建s 的代码。 因此,假设以下定义: 我怎样才能有效地实施的建设者和?他们应支持以下操作: 和 我不想为每个子生成器实现一个特殊情况。 编辑以添加第二个属性,以澄清使用简单的泛型无法做到这一点。我不是在寻找一种方式来组合和-我正在寻找一种方式

  • 我们有一个遗留表,我们不想在其中添加鉴别器列。没有鉴别器列,是否有可能有每个层次结构的表? 我的父类代码: 我的孩子班: 你可以在我上面的例子中看到,我必须使用鉴别器。

  • 我正在处理一个需求。当前有一个搜索页面,其中包含值(示例数据)1)Employee和2)Sport Person的列表框。 对象层次结构(Hibernate Bean)Person是实际对象,它具有两个不同的类1)Employee和2)基于Sports Person的鉴别器列 Person_Type(鉴别器列)。 在搜索页面上,如果用户选择任何一个列表框,将从该子类中得到数据。 现在的要求是同时显

  • 问题内容: 在Java中,我们可以在一个类中创建多少个构造函数。 问题答案: 严格来说,JVM类文件格式将一个类的方法(包括所有构造函数)限制为少于65536。而且,根据汤姆·哈顿(Tom Hawtin)的说法,有效限制为65527。每个方法签名在常量池中占用一个插槽。由于65535池条目中的某些条目(不可避免地)被其他事物消耗,因此格式良好的类文件不可能使用所有可能的方法/构造函数ID。 参考-

  • 在Java中,我们可以在一个类中创建多少构造函数。