我是 Hibernate 的新手,但对 C# 中的实体框架有丰富的经验。我喜欢的一个功能是能够动态决定在查询中立即加载什么。例如,考虑班级和学生实体的一对多关系。
在“查看课程”页面上,我可以这样做:
context.Configuration.EnableLazyLoading = true; //default option
List<Classes> classes = context.Classes.ToList();
现在我可以很高兴地只显示班级信息,而不会浪费资源收集学生数据。只有当用户单击“查看带有名册的班级”时,我才会执行以下操作:
context.Configuration.EnableLazyLoading = true;
List<Classes> classes = context.Classes.Include(c => c.Students).ToList();
通过这句话,我能够决定在这种特殊情况下,我想一次获取所有信息。不是两个查询。不是一百个查询。只需一个查询。尽管几秒钟前只加载了类。
我在 Hibernate 上的所有阅读都解释了如何在关系的配置文件中指定lazy="true|false",但我真的想要决定何时动态加载集合的选项。毕竟,我对购买时速仅为 30 英里或 60 英里的汽车不感兴趣。我需要根据我所在的位置选择速度。
也许使用 fetch 模式作为 JOIN 的选项是可以接受的,因为在这种情况下它只有两个查询(一个用于班级,一个用于学生),但我真的很喜欢在一个查询中完成所有操作的选项,特别是如果我有几个要加载的子集合并且不想对每个关系执行查询。我意识到一次性连接会创建需要流式传输的额外数据,但令我惊讶的是,这种级别的控制并不容易完成,或者可能完全不可用。