Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
子类的Hibernate映射表_Hibernate_Mapping - Fatal编程技术网

子类的Hibernate映射表

子类的Hibernate映射表,hibernate,mapping,Hibernate,Mapping,我有三门课: Person { int id; String name; String lastName; } Employee extends Person { //some additional data } Owner extends Person { //some additional data } 每节课我都有单独的桌子。在Employee表中,键应与Person表中的键完全相同 现在,当我插入Employee类时,Person表中应该有一

我有三门课:

Person {
    int id;
    String name;
    String lastName;
}

Employee extends Person {
    //some additional data
}

Owner extends Person {
    //some additional data
}
每节课我都有单独的桌子。在
Employee
表中,键应与
Person
表中的键完全相同

现在,当我插入
Employee
类时,
Person
表中应该有一条记录,
Employee
中有一条记录具有相同的
ID
(假设这是值1)

在此之后,我希望插入Owner类,并且希望它是同一个人(ID=1),因此在插入Owner之后,应该只在表Owner中添加一条记录,但表Person中的记录应该保持原样

我试过这个:


插入第一个类是可以的,插入具有不同ID的第二个类是可以的,从db获取对象是可以的,但是当我想添加具有相同ID的所有者类时,比如我获得hibernateException的现有人员。。。有人能帮我吗?

这显然是不可能的。因为Java只有一个继承,所以对象不能同时是雇员和所有者。您不应该使用继承来映射这些关联

相反,您应该让人员与其员工角色有一个OnetoOne关联,与其所有者角色有一个OnetoOne关联。

“这显然是不可能的。”在我的代码示例中,Employee extends Profile和Owner exstends Profile

如果我正确地理解了你的意思,你会提出这样的建议:

Person{
Employee emp;
Owner owner;
}
在我的第一堂课上,我能够做到:

Person getPersonFromDb( Class class, int id){  ...  session.get(class, id) ... }

Owner o = (Owner) getPersonFromDb(Owner.class, id);
Employee e =(Employee) getPersonFromDb(Employee.class, id);

在您的方法中,我不能有这样的东西…

“这显然是不可能的。”在我的代码示例中,Employee扩展配置文件和Owner exstends配置文件。如果Java对象是Owner的实例,那么它不能是Employee的实例,反之亦然。因此,Hibernate在通过ID加载person时无法判断返回哪种实体,因为它在employee和owner表中都有一行。这是不可能的。我理解这一点,但我希望有一种方法可以取代hibernate,通过实现接口来代替继承,或者通过在代码中活出继承,但在hibernate中,生成一个组合ex.Owner exstends AbstractPerson,AbstractPerson包含Preson作为字段,但我不知道如何在hibernate中映射它,因为我无法从父级I映射文件访问person字段:,而我的第二个问题是,我希望person ID也是Owner类中的主键……答案不应用于对其他答案进行评论。使用注释来完成此操作,或者编辑您的问题。看看我在回答上的评论。