1

我想使用休眠条件查询仅获取集合的一部分。例如,假设我有一个包含多个 Student 对象的 Class 对象。现在我想获得一个课程列表,但只有德国学生应该被提取到学生集合中(其余的不需要并且会是巨大的开销),只需一个数据库查询。

在 hibernate 的更高版本中(我认为在 3.6.4 之前),这可以通过使用过滤的 createCriteria 来完成,如下所示:

criteria.createCriteria("students", "studentscollection", Criteria.LEFT_JOIN,
     Restrictions.eq("studentscollection.country", "DE"));

问题在于,在当前版本的休眠中,这会使集合未初始化并触发大量数据库查询以加载每个访问时的单个集合的整个集合。这是一个巨大的性能问题,导致数百个查询而不是一个。

当前休眠版本中是否有任何解决方案可以使用一个查询完成此操作?

4

1 回答 1

0

考虑使用较低版本的休眠。我们最近在我的团队中遇到了类似的困境。据我所知,我在 4.0.1 最终版本中使用了类似的结构,并且不记得多个查询/效率的任何问题。但是你是对的,版本 3.6.4 中的行为可以改变(https://hibernate.onjira.com/browse/HHH-2049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel)如果您能找到答案,请在此处告诉我们。

问候,

卢卡斯

于 2012-08-17T08:49:37.000 回答