0

我们正在使用 Spring Framework 并正在设置一个站点,该站点将通过 jersey 直接与应用程序的服务层进行通信。我们遇到了这样的场景:模型中的某些东西是延迟加载的(因为我们需要它们),但我们希望能够在服务或 dao 中“翻转开关”,告诉模型获取模型急切地这样我们就不必编写一堆代码来获取我们需要的关系。

这可能吗?

4

2 回答 2

2

例如,您可以使用Criteria's覆盖它FetchMode

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

这将急切地加载属性集合,即使默认情况下它是延迟获取的

于 2013-03-15T16:34:23.050 回答
0

我不知道有任何预先构建的东西可以为你做这件事,也不想用谷歌搜索它,但我可以想象一个你可以编码的设置......

  • 您想要来回翻转的 POJO 的可加载界面...
  • 包含所有类插槽的插槽类。Slot 可以有一个方法 Slot.load() 来告诉 slot 加载。在本机上,Slot 会延迟加载。这个类可能需要大量时间和大量子类才能正确...
  • SlotLoader 抽象类,其目的是告诉 Slot 何时加载。具有抽象方法 onAssign()。具有最终方法 assign(Slot slot),将加载程序分配给插槽并调用 onAssign。
  • LazyLoader 类实现 SlotLoader。当 onAssign() 被调用时,什么都不做
  • EagerLoader 类实现了 SlotLoader。当 onAssign() 被调用时, slot.load() 被调用。

您想要来回切换的所有方法都需要重新编码以使用 Slot 包装它们的插槽,并且您的 Spring 配置需要知道是使用 LazyLoader 还是 EagerLoader。

于 2013-03-15T16:37:06.673 回答