我是 JPA 的新手。我有一个名为 Person 的超类和两个子类 Teacher 和 Student。大多数时候,一个人只是老师或学生,但有时一个人既是学生又是老师,我需要坚持下去。有人知道如何在 JPA 中映射这个重叠的 UML 继承吗?是否可以?
问问题
747 次
1 回答
0
我认为您应该以另一种方式思考,而不是使用让您思考继承的“is A”,您可以将其视为具有多个角色的人,因此,如果您这样思考,您可以解决它带有聚合,如下所示
public class Person {
private TeacherProfile teacherProfile;
private StudentProfile studentProfile;
}
这让你有了一个美丽的改变:
public class Person {
private Set<Profile> profiles;
}
有以下课程
public abstract class Profile {
private String name;
//common data
}
public class TeacherProfile extends Profile {
//teacher data
}
public class StudentProfile extends Profile {
//student data
}
这可以优雅地解决您的问题,而不会破坏您的继承想法。
我可以解释为什么你最初的想法,即使在关系数据库上是可能的,但在对象世界下是不可能的,考虑通过 ID 获取人,如果你有两个“角色”的同一个人,那么什么实例会休眠返回?学生会错,老师也会错。如果java是一种多重继承语言,这将是可能的,它有自己的问题:)
希望我对你说清楚了。
于 2012-05-07T01:57:26.320 回答