繁体   English   中英

具有两个抽象类的JPA继承

[英]JPA Inheritance with Two Abstract Class

我对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.jdbc4.MySQLSyntaxErrorException:“字段列表”中的未知列“ employee1_.DTYPE”

如果您对所获得的错误类型有任何了解,请多加支持。

最好的祝福

我不是冬眠大师,但是我认为在使用每个类的表时,您不能拥有@DiscriminatorColumn ,仅当您对所有插入的类拥有单个类并且想要区分它们时才需要。

看看单表连接。

在您当前的联接中,它将为所有类创建表,并且将有个人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{
...
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM