java - 具有两个抽象类的 JPA 继承

标签 java mysql sql hibernate jpa

我对 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());

}

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

Caused by: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Unknown column 'employee1_.DTYPE' in 'field list'

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

最诚挚的问候

最佳答案

我不是hibernate专家,但我认为当你使用每类一个表时你不能有@DiscriminatorColumn,只有当你对所有继承类有一个类时才需要它并想区别对待他们。

查看this用于单表连接。

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

关于java - 具有两个抽象类的 JPA 继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24847023/

相关文章:

java - Wicket 设置窗口关闭回调不是在所有地方都可以吗?

JavaFX - 获取非 ASCII 字符的 KeyEvent

java - 为仪表板创建按钮,onClick 问题,也许更好的解决方案?

php - 通知: Undefined offset: 1 in line 23

mysql - 如何找到出生日期在 1980 年到 1996 年之间的用户的百分比。

java - Spring Boot Webflux - flatMap 是链接 http 调用的正确方法吗?

mysql - 在mysql中使用循环将值插入到列中

Mysql Advanced query - Date Range Table to result per day 列

sql - 如何选择多行在两列中分别具有相同的值?

mysql - 提高多主表的查询性能