2010-12-04 74 views
2

我学习Hibernate和有关于我的POJO类 的设计我有一个类的目的地,几个属性,如问题关于Hibernate POJO类设计

private Set<AirTransport> airTransport; 
private Set<RoadTransport> roadTransport; 
private Set<TrainTransport> trainTransport; 

,因为这些问题是refrence一些其他实体类,我的问题是当我将获取我的目的地类时,我不希望这些参考被加载到内存中,以便稍后可以在用户点击任何一个链接(如airtransport)时获取它们。以最佳方式实现。 我是休眠所以请纠正我哪里我错了。

Thnaks提前

+0

请勿将[关闭]添加到您的问题标题中。这意味着另一件事 - 当一个问题因与stackoverflow(或垃圾邮件)无关而关闭时,会自动添加`[closed]`。被接受的答案表明了问题被成功回答的事实。 – Bozho 2010-12-04 07:10:29

+0

+1 Thnaks的指针.. :) – 2010-12-04 07:53:23

回答

2

这被称为“延迟加载”。默认情况下,hibernate(和JPA)中的所有集合都会被懒惰地加载 - 也就是说,它们在被访问之前不会被加载。所以默认情况下,你的对象不会获取所有的数据。

但延迟加载有其复杂性。如果在休眠会话关闭时尝试访问集合,则会引发异常。而且看起来你会在用户做出一些动作(点击一个按钮)之后需要这些集合。

对于这种情况,你有两个选择:

  • 当用户点击该按钮

    ,你再次加载实体,并且初始化所需的集合。可以通过Hibernate.initialize(..)或通过在视图中迭代它。请注意,会话通常在视图呈现之前关闭,因此您可能需要OpenSessionInViewFilter

  • 根本不使用集合。无论如何,他们的行为有限。使用HQL或标准API来获取结果。这可以让你有寻呼功能,而且你不会想到懒惰的问题

0

这就是所谓的懒在ORM世界获取。阅读教程here。您可能还想了解相关模式:Open Session in View

+0

感谢您的链接 – 2010-12-04 06:30:46