我正在使用hibernate标准实现搜索例程以查找注册用户。每个用户可以拥有一个或多个地址。我构建了以下结构,并添加了我需要查询db:
的restirctionsricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN);
当我按用户数据(姓名,姓氏,ssn等)搜索时,我得到了用户提供的每个已知地址的记录(参见下面我用db客户端测试过的hibernate查询的简化版本)< / p>
select *
from User this_ left outer join Address i1_
on this_.ID=i1_.User where lower(this_.Name) like '%mario%' order by i1_.ID desc
Mario有三个地址,db客户端返回三条记录:这对我来说很好,但是hibernate会返回三个User类型的对象,每个对象的地址集合都包含所有地址。这就像你错过了一个独特的查询。
我可以重新设计查询,以便每行获得一个地址(对于同一个用户,但仍有三个结果,但是有一个不同的地址)?
注意:用户可能没有提供任何地址。
答案 0 :(得分:1)
描述的here解决方案是否适合您?
它要求在用户ID上使用distinct
投影来获取用户ID,然后根据需要对其进行水合。
ricerca.setProjection(Projections.distinct(Projections.property("id")))