Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hibernate 铸造实体JPA 2,Spring 3_Hibernate_Spring_Jpa 2.0 - Fatal编程技术网

Hibernate 铸造实体JPA 2,Spring 3

Hibernate 铸造实体JPA 2,Spring 3,hibernate,spring,jpa-2.0,Hibernate,Spring,Jpa 2.0,大家好,我在扩展实体并将它们持久化到数据库时遇到问题,我的模型是 基于人员的实体,必须持久化 朋友-叶子实体 同事-叶实体 当我从数据库中找到一个人,然后我想“交”一个朋友,而不是创建另一个具有相同值的人行时,问题就出现了,我想取现有的一行 我使用的连接策略有我的继承策略 有什么线索吗?我打赌你所说的“叶子实体”是指“朋友和同事继承人”,对吗 您试图实现的目标不适合使用继承 用简单的OO方式思考一下: 您已经实例化了一个“Person”(正如其他评论所建议的,使用Person而不是People更

大家好,我在扩展实体并将它们持久化到数据库时遇到问题,我的模型是

基于人员的实体,必须持久化
朋友-叶子实体
同事-叶实体

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

我使用的连接策略有我的继承策略

有什么线索吗?

我打赌你所说的“叶子实体”是指“朋友和同事继承人”,对吗

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

用简单的OO方式思考一下:

您已经实例化了一个“Person”(正如其他评论所建议的,使用Person而不是People更合理),您不能使该实例成为“朋友”

你应该考虑交朋友/同事分开的实体,并把它们当作一个人所携带的额外属性。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

}
通过这种方式,如果你想让一个人成为一个同事,你要给这个人分配一个“同事”属性


老实说,这个问题与Hibernate或JPA无关。正如我之前所建议的,它在普通POJO中根本不起作用。在Java中,您根本无法使一个类的实例成为另一个类的实例。

非常好。我也会考虑把你的人类重新命名为人。毕竟,类代表一个人,而不是多个人。:-)同意命名。事实上,我只是按照原帖子的命名。。。老实说,在这种情况下,我甚至不认为“朋友”是个好名字…:请允许我对它们稍加修改。对于注释,我认为我的问题在于继承的连接策略的概念,因为子实体上的pk将是父表的pk和FK。PS:当我提到“Make it”时,我的意思是在“Friend”表上保存一条记录,在使用Hibernate/JPA等时,所有数据都在“Person”表上,除非你真的需要处理遗留的DB模式,否则永远不要使用DB方面进行设计。在RMDBS的世界中,有很多“好”的方法使OO模型变得一团糟(您的案例就是一个很好的例子)。以面向对象的方式思考,并将您的模型转换为DB表。