2013-03-15 38 views
0

我们使用的是Spring Framework,并且正在建立一个站点,通过球衣直接与应用程序的服务层进行通信。我们遇到了一些场景,我们的模型中的特定事物被延迟加载(因为我们需要它们),但我们希望能够在服务或dao中“翻转开关”,以告诉模型获取模型所以我们不需要编写一堆代码来获取我们需要的关系。是否可以在模型之外控制EAGER/LAZY加载?

这可能吗?

List parents = session.createCriteria(Parent.class) 
.add(Restrictions.like("prop", value)) 
.setFetchMode("childs", FetchMode.EAGER) 
.list(); 

热切即使在默认情况下它的延迟访

+0

如果您不想使用Hibernate API,那么您可以在同一会话中(通常在DAO方法中)访问延迟加载的属性。对于集合,你必须调用类似'size()'的东西。 – 2013-03-15 16:53:06

回答

2

可以使用CriteriaFetchMode覆盖此例如任何预先构建的东西,将为你做这个,并不觉得像谷歌搜索它,但我可以想象一个设置,你可以编码...

  • 可加载的接口,用于您想要来回翻转的POJO ...
  • 插槽类,用于包装所有类插槽。插槽可以有一个方法Slot.load(),它会告诉插槽加载。本地化,Slot会延迟加载。这个类可能需要大量的时间和大量的子类才能获得正确的...
  • SlotLoader抽象类,其目的是告诉Slot何时加载。抽象方法onAssign()。有最后的方法分配(槽插槽),将加载器分配给插槽并调用分配。
  • LazyLoader类实现SlotLoader。当onAssign()被调用时,什么也不做
  • EagerLoader类实现SlotLoader。当调用onAssign()时,会调用slot.load()。

所有要来回切换需要你的方法重新编码来包装他们的插槽,插槽,以及Spring配置需要知道是否使用LazyLoader或EagerLoader。

+0

感谢您的反馈。我可能不应该用hibernate标记这个。有没有弹簧解决方案? – Webnet 2013-03-15 16:48:33

0

我不知道这将加载孩子的属性集合:

相关问题