我正在Grails工作& Groovy,但这是一个休眠问题。这里是我的Grails领域类:休眠条件子查询引用“根”查询的值
public Card {
// implicit Long id
String name
// ... and over a dozen other fields with various types.
}
我现在有这样的Hibernate查询:
def name = "foo"
def result = session.createQuery("from Card as c where lower(c.name) like ? and c.id in (select max(c2.id) from Card as c2 where c.name = c2.name)")
.setString(0, "%${name}%")
.list()
这得到所有卡包含字符串“foo”的名字,跳过上述除重复名称的任何卡“最新”(我假设更高的ID意味着'更新')。 我必须避免返回具有重复名称的卡片。
除了过滤名称和避免重复名称问题,我需要过滤和/或排序卡中的其他领域。我也需要分页。我想用Criteria API来做到这一点,因为生成SQL/HQL的方法会导致可维护性恶梦。
我只是不明白如何通过Criteria API来做这种查询。有分离的查询可以通过Criteria API用作子查询。然而,这些子查询似乎完全独立于主查询 - 我无法在'c.name'处将其与'c2.name'进行比较。
我在这里错过了什么?