如何使用条件为每个用户地址在Hibernate中获取不同的用户实体

时间:2011-10-11 16:24:35

标签: hibernate hibernate-criteria

我正在使用hibernate标准实现搜索例程以查找注册用户。每个用户可以拥有一个或多个地址。我构建了以下结构,并添加了我需要查询db:

的restirctions
ricerca = 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类型的对象,每个对象的地址集合都包含所有地址。这就像你错过了一个独特的查询。 我可以重新设计查询,以便每行获得一个地址(对于同一个用户,但仍有三个结果,但是有一个不同的地址)? 注意:用户可能没有提供任何地址。

1 个答案:

答案 0 :(得分:1)

描述的here解决方案是否适合您?

它要求在用户ID上使用distinct投影来获取用户ID,然后根据需要对其进行水合。

ricerca.setProjection(Projections.distinct(Projections.property("id")))