gpt4 book ai didi

java - Hibernate继承,多态保存

转载 作者:行者123 更新时间:2023-12-01 06:35:21 25 4
gpt4 key购买 nike

我有一个类Person有两个子类 StudentEmployee

@Entity(name="person")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
@Id
@GeneratedValue
private Integer id;
}

@Entity(name="student")
@PrimaryKeyJoinColumn(name="id")
public class Student extends Pessoa implements Serializable {
}

@Entity(name="employee")
@PrimaryKeyJoinColumn(name="id")
public class Employee extends Person implements Serializable {
}

学生也可以是雇员,但是当我尝试保存与雇员具有相同 id 的学生时,hibernate 会抛出重复的主键异常
org.hibernate.exception.ConstraintViolationException: Duplicate entry '142.855.267-71' for key 'PRIMARY'

hibernate 试图在数据库中插入一个新人,我不希望那样。

有没有办法让hibernate识别数据库中已经存在一个人并只保存对这个人的引用?

顺便说一句:当我手动插入一个学生和一个员工时,一切都像魅力一样。

最佳答案

您需要指定表和列映射。以下是每个子类映射的表。

@Entity(name="person")
@Table(name = "PERSON")
@Inheritance(strategy = InheritanceType.JOINED)
public class Person implements Serializable {
@Id
@GeneratedValue
@Column(name = "ID")
private Integer id;
}

@Entity(name="student")
@Table(name="STUDENT")
@PrimaryKeyJoinColumn(name="id")
public class Student extends Pessoa implements Serializable {
}

@Entity(name="employee")
@Table(name="EMPLOYEE")
@PrimaryKeyJoinColumn(name="id")
public class Employee extends Person implements Serializable {
}

关于java - Hibernate继承,多态保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19881658/

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