2009-10-03 41 views
4

有些时候,我想将关系定义为懒惰加载,因为90%的时间我不想要子实体,但在某些情况下也有可能一次获得整个层次结构。我不希望通过使用命名查询来实现此目的,因为当我转换为例如父子层次结构时,父子层次结构很有用。 JSON格式。目前我的诡计是调用.getChildEntities()。size()强制延迟加载在同一个事务中。为什么JPA没有为延迟加载关系提供loadChildren()方法?

有没有更好的方法?

回答

2

取决于当然的JPA实施。有些(大多数)会使用你引用的方法调用加载所有内容,但有些可能会因为内存管理的原因而发出COUNT(*)查询来获取大小(不希望加载所有元素的情况下有很多)

--Andy(DataNucleus

+1

感谢您的评论,Andy。我知道我的解决方法可能并不总是适用于所有的实现(这就是为什么它是一个黑客:))。但是,当然,必须有一个标准的方法来加载子实体。我可以迭代它们,对主键值进行多余的调用,但这不完全是优雅的... – davek 2009-10-03 18:02:23

+0

悲伤地没有标准方式。这个想法是持久性实现在你需要的时候得到你的数据,所以你放弃了控制,只是说“懒惰地加载它”。你的impl不能有效地为你提供数据吗?那里不是所有的元素? – DataNucleus 2009-10-04 08:07:05

+1

是的,我的实现向我提供了我需要的所有数据,但是调用一个属性(我不直接使用),除了强制延迟加载看起来并不“正确”之外,没有任何其他原因。我很高兴实现能够在需要时为我提供数据,但如果我碰巧已经转移到另一个事务上,那么它会抱怨。 – davek 2009-10-04 17:31:50

相关问题