Hibernate&带连接的EntityManager

时间:2010-11-21 22:03:22

标签: java hibernate persistence

在我的假设中,我有一个带注释的用户模型类。此用户模型还包含对两组的引用:

  • 一组Pet对象(Pet对象也是数据层中表示的带注释的模型)
  • 一组Food对象(Pet对象也是数据层中表示的带注释的模型)

当我从数据库中拉出User实体(entityManager.find(User.class,id))时,它将自动填充所有User字段,但它显然不会填充这两个集合。

我是否需要执行entityManager.createQuery并使用普通的SQL连接查询然后手动创建User对象?

提前致谢

2 个答案:

答案 0 :(得分:2)

如果您使用OneToMany将关系从用户映射到宠物和食物,您可以选择是否自动收集字段。

请参阅API doc for javax.persistence OneToMany

根据您构建映射的方式(PK-FK或连接表等),您可能会或可能不会获得良好的性能。拥有两个加入的OneToMany关系意味着当您读取用户时,最终可能会出现大量的行。

答案 1 :(得分:2)

嗯,不是吗?这可能不是你想要的方式。我不知道你为什么说“它显然不会填满这两套”。它非常能够为你填充集合,这就是首先使用像hibernate这样的ORM的重点。您的对象在代码中执行它们应该的样子,并且尽可能自动地处理“数据库”事物。

如果你将EAGER标记为多个集合,Hibernate会抱怨,但实际上并不是很清楚你真的需要其中任何一个都渴望。基本上一旦它们被映射,只需访问它们就会运行查询以使用数据填充它们(假设Session仍处于打开状态等等。)如果你解释了想要它是如何工作的会更容易帮助解决方案。