我想找出使用Grails GORM来执行特定类型查询的最有效/最有效的方式。GORM查询过滤器不是一个类的直接属性
这是我想要以多对一关系查询所有子/链接项的场景。这是一种单向关系,许多方面都使用它所链接的事物的ID。
一个例子是学年和该学年的学期之间的关系。在学期表中,该学期所属学年的ID存储在表中。然而,学年并没有与其属于它的学期挂钩的任何事情。这样做是为了保持灵活的学期数。我希望做的就是使用像HQL这样的东西来检索所有拥有相同学年的学期。在常规SQL中,我们可以使用学期表的学年id列过滤行。在HQL中,它并不那么简单。学年id不作为域类的属性提供。相反,Hibernate只是用它来加载实际的学年对象。
下面的东西应该在这种情况下工作吗?
select from Semester as s where s.year.id = ?
在这种情况下,持有学年的学期域类的属性称为年。该查询采用年份属性和当年的ID并使用它来过滤学期。
这只是一个例子,但我正在开发的系统包含多个类似的安排,可能需要加载一组所有具有相同链接域对象的域对象。
这样做可能是一种更有效的方法。其中一个例子是使域名类的实际学年ID值可用。然而,这意味着同一列被映射到域类的多个属性。这可能不是必要的,但它是解决这类问题的另一种可能方式。
有一些Hibernate的经验,但当你想做更多不寻常的事情时,一些问题会在Hibernate中变得复杂。