我想使用hibernate条件查询仅获取集合的一部分。举个例子,假设我有一个包含多个Student对象的Class对象。现在我想获得一个班级列表,但只有德国学生应该只需要一个数据库查询就可以进入学生集合(其余部分不需要,而且费用很高)。
在hibernate的更高版本中(我认为在3.6.4之前)可以通过使用这样的过滤的createCriteria来完成:
criteria.createCriteria("students", "studentscollection", Criteria.LEFT_JOIN,
Restrictions.eq("studentscollection.country", "DE"));
问题在于,在当前版本的hibernate中,这使得集合未初始化并触发大量数据库查询,以便在访问时为每个集合加载整个集合。这是一个巨大的性能问题,导致数百个查询而不是一个。
当前的hibernate版本中是否有任何解决方案可以使用一个查询完成此操作?
答案 0 :(得分:0)
考虑使用较低版本的hibernate。我们团队最近遇到了类似的困境。据我记得,我使用版本4.0.1 final的类似结构,并且不记得多个查询/效率的任何问题。但你是对的,版本3.6.4中的行为可以改变(https://hibernate.onjira.com/browse/HHH-2049?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel)如果你能找到答案,请告诉我们。
问候,
卢卡斯