1

我是 JPA 的新手。我有一个名为 Person 的超类和两个子类 Teacher 和 Student。大多数时候,一个人只是老师或学生,但有时一个人既是学生又是老师,我需要坚持下去。有人知道如何在 JPA 中映射这个重叠的 UML 继承吗?是否可以?

4

1 回答 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 回答