java - 如何修复 org.hibernate.WrongClassException?

标签 java jpa spring-data-jpa

我正在使用 Spring Boot 开发一个简单的 Web 应用程序。我将多个实体从继承层次结构映射到单个预先存在的表。这是我的基类:

@Entity
@Table(name = "kpodr")
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorFormula("CASE WHEN k_se = 3 THEN 'FACULTY' WHEN k_se = 4 THEN 'DEPARTMENT' ELSE 'COMMON' END")
@DiscriminatorValue("COMMON")
public class Unit {

  @Id
  @Column(name = "k_podr")
  protected long id;

  ...

}

和子类:

@Entity
@DiscriminatorValue("FACULTY")
public class Faculty extends Unit {
  ...
}

@Entity
@DiscriminatorValue("DEPARTMENT")
public class Department extends Unit {

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "k_pvu")
  private Faculty faculty;

  ...

}

一切正常,我可以获取我需要的任何数据,甚至是拥有部门Faculty。但现在我需要使用基本 Unit 类型来映射其他实体:

@Entity
@Table(name = "mesto_rab")
public class Workplace {

  @Id
  @Column(name = "id")
  private long id;

  @ManyToOne(fetch = FetchType.EAGER)
  @JoinColumn(name = "k_podr")
  private Unit unit;

  ...

}

当我尝试获取工作场所时,我得到org.hibernate.WrongClassException:对象[id = 85]不是指定的子类[workload.faculty.Faculty]:加载的对象属于错误的类classworkload.unit .单位.

我在代码中找到了导致此异常的确切位置。如果我删除 DepartmentFaculty 之间的关联,那么一切都会按预期进行。

@Entity
@DiscriminatorValue("DEPARTMENT")
public class Department extends Unit {

  @ManyToOne(fetch = FetchType.EAGER)   <====|
  @JoinColumn(name = "k_pvu")           <====| Remove this
  private Faculty faculty;              <====| 

  ...

}

如何修复org.hibernate.WrongClassException并保持院系之间的关联?

最佳答案

似乎是 id=85 的行由 Department 引用,但其判别器公式的计算结果并不为 "FACULTY"

换句话说,您可能有一行 kpodr(id = 85, k_se <> 3)另一行 kpodr(k_se = 4, k_pvu = 85)这就是导致问题的原因。

关于java - 如何修复 org.hibernate.WrongClassException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58281547/

相关文章:

Java 数字模式递归

java - JPA 对于原始属性也是懒惰的吗?

hibernate - 记录 JDBC/Hibernate/JPA 事务隔离级别

java - JPA 属性表达式与使用 'In'

java - 需要帮助理解 JAudioTagger、标签映射

java - Android TextView 换行不工作

java - Spring boot : java. lang.IllegalArgumentException:driverClassName 需要 jdbcUrl

java - 使用 Spring Boot + Spring data JPA 保存在 JPA 定义中时出现异常

java - Spring Data Jpa 查询返回的对象具有空值

java.lang.NoSuchMethodError : org. apache.poi.hssf.usermodel.HSSFWorkbook.getCreationHelper()Lorg/apache/poi/hssf/usermodel/HSSFCreationHelper;