我有一个HQL查询,我需要获得不同的结果 . 问题是我加入并急切地在大量其他表中获取,并且最终执行的底层sql查询在那里有明显的,但是由于它选择了所有列,所以这些结果无法区分来自所有已加入的实体 . 然后,Hibernate似乎对结果集执行了一些“魔术”,以确保我确实得到了我想要的实体的不同结果,但实际上在底层SQL查询上运行一个独特的东西似乎很浪费 . 查询类似于:
select distinct a from com.blah.A a
inner join fetch a.b b
inner join fetch b.r
left outer join fetch b.c
inner join fetch a.d
inner join fetch a.e
当然,这不是实际的查询,但它对我正在做的事情有一个模糊的概念 . 即使Hibernate仍然需要在查询返回时进行一些过滤以确保我只获得不同的“A”实体,它是否希望底层的功能具有独特性?似乎很浪费 .
3 回答
我建议你使用其中之一
1)标准查询
https://docs.jboss.org/hibernate/orm/3.3/reference/en/html/querycriteria.html
2)Groovy SQL
http://groovy.codehaus.org/Tutorial+6+-+Groovy+SQL
这可能对你有帮助 . 谢谢 .
从未使用HQL,因为Biswas,我通常使用createCriteria,但如果查询返回域对象,并且您只想要不同的结果,您可能会尝试定义为Set而不是def,这将修复您不会得到多个最后结果的时间 .
连接在hibernate中非常简单,使用createAlias和JoinType . 不同之处有点棘手,我们必须对所有必填字段使用投影,然后我们可以将Projections.distinct添加到应该是不同的字段并将resultTransform添加到bean . 在下面找一个例子: