2011-05-27 110 views
0

早上好。 我有两个entitis,User和User1(它扩展了用户@Inheritance(strategy=InheritanceType.JOINED),添加一些额外的信息,如实体用户不需要的电子邮件,电话号码等等...属性)。Java EE,将实体投入扩展!

现在... User user已被保留。 我想,在未来,能够施放此用户,提供额外的数据,做这样的事情:

User1 user1 = (User1)user; 
user1.setEmail("[email protected]"); 

我试过这个解决方案,当然...它不工作! (铸造异常返回)。

有什么想法?任何帮助? 谢谢。

+0

您正在使用Hibernate作为JPA提供者?当多数提供者属于多态继承关系的一部分时,它们将实例化正确的实体。如果您正在检索的用户确实是用户1,则倒谱应该成功。有问题的用户是否真的是User1? – 2011-05-27 11:50:46

回答

0

在Java中投射并不是那种方式。你只能投射到你实际延伸的物体。

什么你可能要做的就是在你的扩展实体提供一个拷贝构造函数:

public ExtendedUser(BasicUser user){ 
    this.setFoo(user.getFoo()); 
    this.setBar(user.getBar()); 
} 

但是没有办法施展的东西弄成不延伸。这就是所谓的类型安全,并且是Java最重要的方面之一。

参考:

+0

谢谢!我试过这个解决方案,但是......有什么不对。它也在用户上创建了一个新的记录..用新的ID,并且这个新记录被正确地扩展。我想让用户保留原始ID,并添加额外的数据! – Mauro 2011-05-27 10:07:45

+0

@Mauro也许你应该改变你的设计,并将你的扩展数据保存在与@OneToOne(可选)参考相关联的另一个实体中。 – 2011-05-27 10:10:02

+0

这意味着我必须删除延伸?我完全失去了。我很抱歉我的问题,我是JEE新手。 – Mauro 2011-05-27 10:18:04