gpt4 book ai didi

java - org.hibernate.mapping.JoinedSubclass 无法转换为 org.hibernate.mapping.RootClass

转载 作者:行者123 更新时间:2023-12-02 04:16:51 35 4
gpt4 key购买 nike

我有这些实体;

Person.class

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

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
@Column(name = "person_id")
private long personID;

StudentBean.class

@Entity
@Table(name = "student_information")
public class StudentBean extends Person {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private long studentID;

我的目标是将学生记录与 Person 类和 StudentBean 类中的详细信息一起保存在 1 个表中,但我遇到了这些异常

org.hibernate.mapping.JoinedSubclass cannot be cast to org.hibernate.mapping.RootClass

在我的研究中,我偶然发现了这个线程 [Spring 3.1 Hibernate 4 继承异常 cannot be cast to org.hibernate.mapping.RootClass

据此判断,异常的原因是Parent类和Child类中的@Id引起的。但是,如果我在任何一个类中删除了 @Id,它就不允许我保存该对象,因为我的实体没有标识符。

我想要一个个人 ID 来识别校外人员,并需要一个学生 ID 来识别学校内部人员,这可能吗?如果没有,我如何删除 Person 类的 PK,但我仍然可以扩展它并将其保存到另一个表中。

最后,实现这个设计的最佳方式是什么,Person可以扩展到Student Class,Teacher Class,SchoolPrincipal Class

最佳答案

您的映射错误。您不能在父类(super class)中添加 @Id,然后在子类中添加另一个 @Id。 “id”应该唯一标识继承树中的任何对象(“Student”也是“Person”)。

如果您想要不同类型的“人”,您可以在“人”中添加一个额外字段,了解他们是否正在接受教育。但不明白它如何成为“id”的一部分

该错误消息很愚蠢,并没有告诉您真正的原因;与 Hibernate 开发人员一起完成这部分工作。

关于java - org.hibernate.mapping.JoinedSubclass 无法转换为 org.hibernate.mapping.RootClass,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37718753/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com