使用jpa处理3级深度的继承层次结构

时间:2013-05-28 12:03:26

标签: inheritance jpa eclipselink

我在jpa中实现继承时遇到问题。我有以下实体:

@Entity 
@Inheritance(strategy=InheritanceType.JOINED)
public class Person implements Serializable{
private String name;
private String }

@Entity 
@Inheritance(strategy=InheritanceType.JOINED)    
public class User extends Person {
private String salary;}

public class chef extends User{}

我希望所有实体都具体,这是正确的还是我应该改变什么?

1 个答案:

答案 0 :(得分:0)

看起来您的用户条目可以独立于Chef表条目。 Java继承不允许您切换对象以使其成为不同的类 - 对象是User或Chef。 JPA Joined继承遵循Java继承的规则,因此Chef表中的行与User表行相关联,因为它们是单个实体。

因此,如果您有一个User实体,则无法将其变为Chef实体。你需要的是一个可以分配角色的用户,比如Chef。一种方法是映射注释中提到的类型字段 - 但它不会授予您访问Chef表数据的权限 - 您仍然无法使用它来切换实例以成为Chef。如果您需要数据,您可以创建User和Chef独立实体,并让User具有1:1映射(例如role),可以为其分配包含相关数据和业务规则的Chef实体。