【发布时间】:2011-09-19 06:26:49
【问题描述】:
假设我有两个经典的非抽象 JPA 类:Person 和 Student。
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public class Person {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String id;
// ...
}
@Entity
public class Student extends Person {
// ...
}
现在有一些身份证的人进入大学并成为一名学生。 如何在 JPA 中处理该事实并保留人员 ID?
student = new Student();
student.setPersonData(person.getPersonData());
student.setId(person.getId());
entityManager.persist(student);
上面的代码会产生“传递给持久化的分离实体”异常,而使用entityManager.merge(student) 会跳过分配的id 并创建两个具有新ID 的新实体Person 和Student。任何想法如何保留原始 ID?
【问题讨论】:
-
我确定它不会创建“2 个新实体”......只是它在每个表中放置了一行,毕竟这是 JOINED 继承的内容,相当于一个学生对象
-
@DataNucleus 2 个实体意味着人和学生都可以通过新 ID 找到。但如果它能让我找到解决方案或解释为什么它不可能,我很容易同意你的看法。
-
如果任何 JPA 实现通过 find(cls, 1) 调用返回一个 Student(1) 和一个 Person(1),那么它就有一个错误。数据库中的内容是它的另一面。根据下面的回复,没有简单的方法可以实现您的目标