关于Hibernate POJO类设计的问题

时间:2010-12-04 06:09:03

标签: java hibernate orm

我正在学习hibernate并且对我的POJO类的设计有疑问 我有一个类目的地,很少有像

这样的属性
private Set<AirTransport> airTransport;
private Set<RoadTransport> roadTransport;
private Set<TrainTransport> trainTransport;

因为这些是对其他一些实体类的引用,我的问题是当我将获取我的目标类时,我不希望这些引用被加载到内存中,以便以后当用户点击任何一个时可以获取它们像(airtransport)这样的链接。这可以通过最佳方式实现。 我喜欢Hibernate所以请在我错的地方纠正我。

提前举手

2 个答案:

答案 0 :(得分:2)

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

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

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

  • 当用户单击该按钮时,您再次加载该实体,并初始化所需的集合。通过Hibernate.initialize(..)或在视图中迭代它。请注意,会话通常在呈现视图之前关闭,因此您可能需要OpenSessionInViewFilter

  • 根本不使用收藏品。无论如何,他们的行为有限。使用HQL或条件API获取结果。这允许您进行分页,而您不会考虑延迟问题

答案 1 :(得分:0)

这在ORM世界中称为Lazy Fetch。阅读教程here。您可能还想了解相关模式:Open Session in View