铸造实体JPA 2,Spring 3

时间:2011-10-19 01:26:48

标签: hibernate spring jpa-2.0

大家好我无法扩展实体并将它们持久化到数据库,我的模型已经有了,

人 - 必须坚持的基础实体   朋友 - 叶子实体
  同事 - 叶子实体

当我从数据库中找到一个人然后我想“让它成为朋友”而不是创建另一个具有相同值的People行时,问题就出现了,我想采用现有的行。

我使用加入策略有我的继承策略。

任何线索??

1 个答案:

答案 0 :(得分:2)

我打赌你的意思是“叶子实体”是“朋友和同事继承人”,对吗?

您尝试实现的目标不适合使用继承。

以简单的OO方式思考:

你已经实例化了一个“人”(正如其他评论所暗示的那样,使用Person而不是People更合理),你不能让那个实例成为“朋友”。

您应该考虑将Friend / Coworker分开实体,并将它们视为Person携带的额外属性。 e.g。

@Entity
class Person {
  @OneToOne(mappedBy="people")
  FriendAttribute friendAttribute;

  @OneToOne(mappedBy="people")
  CoworkerAttribute coworkerAttribute;
}


@Entity
class FriendAttribute {
  @OneToOne
  Person person;

  // other friend-related attributes

}

@Entity
class CoworkerAttribute {
  @OneToOne
  Person person;

  // other coworker-related attributes

}

通过这种方式,如果你想让一个人成为一个同事,你将把Coworker属性分配给那个人。

老实说,这个问题与Hibernate或JPA无关。它根本不适用于普通的POJO,就像我之前建议的那样。在Java中,您根本无法使类的实例成为另一个类的实例。