2013-05-28 197 views
0

我在jpa中实现inheritence有问题。我有以下实体:处理继承层次结构3层深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{} 

我希望所有的实体都是具体的,这是正确的还是应该改变一些东西?

+0

看起来好,你有什么问题? – James

+0

我想插入表中的用户现有的用户在厨师:用户厨师=新厨师(); chef =(用户)dao.trouverPersonneParId(“mark”); \t \t dao.ajout_createur(chef);但我有这个错误:java.lang.ClassCastException:com.pfe.domaine.User不能转换为com.pfe.domaine.Chef – joice

+0

你可以发布关于你的dao的代码吗?看起来有一段时间从'User'到'Chef'的表演,这就是为什么我想看看你在做什么,看看我能不能帮助你。 –

回答

0

看起来像您的用户条目可以独立于厨师表条目。 Java继承不允许你切换一个对象来使它成为一个不同的类 - 一个对象是一个用户或一个厨师。 JPA加入继承遵循Java继承的规则,因此Chef表中的行与User表行绑定,因为它们是单个实体。

所以,如果你有一个用户实体,你不能让它成为厨师实体。听起来你需要的是一个可以分配角色的用户,比如厨师。一种方法是像注释中提到的那样映射类型字段 - 但它不会让您访问Chef表数据 - 您仍然无法使用此选项切换实例成为Chef。如果您需要这些数据,您可以创建用户和厨师独立实体,并让用户拥有1:1映射(称为角色),可以为其指定一个包含相关数据和业务规则的Chef实体。

+0

ok谢谢@Chris。1:1映射的解决方案是一个好主意,但对我来说我不需要访问Chef表数据 – joice