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

具有两个抽象类的JPA继承

钱季
2023-03-14

我有一个关于JPA中继承的问题,是否可以使用JOINED策略来实现这个层次结构?

这是我的代码:

@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name = "DTYPE", discriminatorType = DiscriminatorType.STRING,  length = 4)
public abstract class Person implements Serializable {
...
}

@Entity
@Table(name = "EMPLOYEE")
@DiscriminatorValue(value="EMPL")
public abstract class Employee extends Person implements Serializable{
...
}

@Entity
@Table(name="CLIENT")
@DiscriminatorValue(value="CLIE")
public class Client extends Person implements Serializable{
...
}

@Entity
@Table(name="TEACHER")
@DiscriminatorValue(value="TEAC")
public class Teacher extends Employee implements Serializable{
...
}

在上面的层次结构之后,我尝试使用JPQL进行查询,这是查询:

@Entity
@Table(name="FICHA_EVALUACION")
public class SheetEvaluation implements Serializable{
    @OneToOne
    private Teacher teacher;
}  

代码从主代码运行

Query query = entityManager.createQuery("SELECT f FROM SheetEvaluation f, Teacher teac,  Employee emp, Person per WHERE f.teacher.id = teac.id and teac.id = emp.id and emp.id =  per.id");

List<SheetEvaluation> sheetEvaluations =  query.getResultList();



for (SheetEvaluation sheetEvaluation : sheetEvaluations ) {
     System.out.println(" Teacher Name= " + sheetEvaluation .getTeacher().getName());

}

当我运行该查询时,会抛出以下错误

导致原因:com . MySQL . JDBC . exceptions . JDBC 4 . MySQL syntaxerrorexception:未知列“employee1_。“字段列表”中的“DTYPE”

如果您对获得的错误类型有任何想法,我非常感谢您的支持。

致敬

共有1个答案

焦驰
2023-03-14

我不是hibernate大师,但我认为当您为每个类使用表时,您不可能拥有<code>鉴别器列,只有当您为所有固有类拥有一个类并且想要区分它们时,才需要它。

查看此单表联接。

在当前联接中,它将为所有类创建表,并将具有人员 fk。

@Entity
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
...
}

@Entity
@Table(name = "EMPLOYEE")
public class Employee extends Person implements Serializable{
...
}

@Entity
@Table(name="CLIENT")
public class Client extends Person implements Serializable{
...
}

@Entity
@Table(name="TEACHER")
public class Teacher extends Employee implements Serializable{
...
}
 类似资料:
  • 问题内容: 您将如何在以下示例代码中配置注释?我只想保留JPA注释,避免使用Hibernate特定的依赖项。 下面的代码正确吗? (这些类将具有多个版本,RefSomeOtherExample等,并且每个类一个db表。有些可能会添加其他字段(列),但大多数只会使用继承自“ RefData”基类的基本字段。) 基类: 最终,我想使用Hibernate的SchemaExport类从中生成模式创建脚本。

  • 想象一下,我有一个抽象类动物的方法: 然后我有一个类,用以下内容扩展这个抽象类: 我希望每个扩展Animal的类都有一个fetch()方法。然而,fetch方法为相关动物指定了一些独特的特征(狗的爪子、猫的爪子等)。例如,cat的fetch()将获取参数fetch(fellinecat kitty)并表示: 因此,抓取方法接受了扩展抽象类“动物”(因此是动物)的参数。我在“动物”中定义了抓取()方

  • 问题内容: 我的数据模型代表法人实体,例如企业或个人。两者都是纳税实体,都具有TaxID,电话号码和邮件地址的集合。 我有一个Java模型,其中有两个扩展抽象类的具体类。抽象类具有两个具体类共有的属性和集合。 我正在 MySQL* 数据库上使用 Hibernate JPA注释,其类如下: * 问题是,和对象需要参考他们的主人,这是一个。hibernate抱怨: 看来这将是一个相当普遍的Java继承

  • 我的代码: 问题:“

  • 继承一个可以实现的普通超类有什么不同吗? atm我有一个名为的抽象类,我有/扩展这个。 abstractcar中的一个字段设置为"私有int容量" 但是在子类“小型汽车”中,当我输入“容量”作为构造函数中使用的变量时,它说“容量在抽象汽车中有私有访问” 我想: > 子类继承超类的所有字段和方法? 我现在该怎么进行?

  • 我有一个抽象类,这个类是在她的子类中扩展的: < li >我在这个抽象类上实现了一个方法,并抽象了另一个方法 < li >实现的方法是每个子类对象都必须访问的通用方法。所以我决定在抽象类上实现它,避免在每个子类上实现相同的方法。 小例子: 我想听听你对这种实施方式的看法, 问候。