我正在学习hibernate并且对我的POJO类的设计有疑问 我有一个类目的地,很少有像
这样的属性private Set<AirTransport> airTransport;
private Set<RoadTransport> roadTransport;
private Set<TrainTransport> trainTransport;
因为这些是对其他一些实体类的引用,我的问题是当我将获取我的目标类时,我不希望这些引用被加载到内存中,以便以后当用户点击任何一个时可以获取它们像(airtransport)这样的链接。这可以通过最佳方式实现。 我喜欢Hibernate所以请在我错的地方纠正我。
提前举手
答案 0 :(得分:2)
这称为“延迟加载”。默认情况下,hibernate(和JPA)中的所有集合都是懒惰加载的 - 也就是说,在访问它们之前不会加载它们。因此,默认情况下,您的对象不会获取所有数据。
但延迟加载有其复杂性。如果在关闭hibernate会话时尝试访问集合,则会引发异常。而且在用户做出一些动作(点击一个按钮)之后,您似乎需要这些集合。
对于这种情况,您有两种选择:
当用户单击该按钮时,您再次加载该实体,并初始化所需的集合。通过Hibernate.initialize(..)
或在视图中迭代它。请注意,会话通常在呈现视图之前关闭,因此您可能需要OpenSessionInViewFilter
根本不使用收藏品。无论如何,他们的行为有限。使用HQL或条件API获取结果。这允许您进行分页,而您不会考虑延迟问题
答案 1 :(得分:0)
这在ORM世界中称为Lazy Fetch。阅读教程here。您可能还想了解相关模式:Open Session in View