簡體   English   中英

如何修復 org.hibernate.WrongClassException?

[英]How to fix org.hibernate.WrongClassException?

我正在使用 Spring Boot 開發一個簡單的 Web 應用程序。 我將 inheritance 層次結構中的多個實體映射到一個預先存在的表。 這是我的基礎 class:

@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;

  ...

}

一切正常,我可以獲取我需要的任何數據,甚至是擁有該DepartmentFaculty 但現在我需要對 map 其他實體使用基本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;

  ...

}

When I try to fetch workplaces I get org.hibernate.WrongClassException: Object [id=85] was not of the specified subclass [workload.faculty.Faculty]: loaded object was of wrong class class workload.unit.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) ,這就是導致問題的原因。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM