Hibernate子类的映射表

时间:2012-12-06 20:30:29

标签: hibernate mapping

我有3个班级:

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类,我希望它是同一个Person(ID = 1)所以在插入Owner之后它应该只在表Owner中添加一条记录,但是记录在表中Person应该保留为它是

我试过这个:http://viralpatel.net/blogs/hibernate-inheritance-table-per-subclass-annotation-xml-mapping/

插入第一个类是正常的,插入第二个不同的ID是好的,从db获取对象是好的,但是我想添加具有相同ID的Owner类,例如我得到的hibernateException的现有人...可以任何人帮助我吗?

2 个答案:

答案 0 :(得分:0)

这显然是不可能的。由于Java只具有单一继承,因此对象不能同时是员工和所有者。您不应该使用继承来映射这些关联。

相反,您应该让Person与其Employee角色具有OnetoOne关联,并且与其所有者角色具有OnetoOne关联。

答案 1 :(得分:0)

“这根本不可能。”在我的代码示例中,Employee扩展了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);

在你的方法中我不能有这样的东西......