0

我正在实现一个带有休眠条件的搜索例程来查找注册用户。每个用户可以有一个或多个地址。我已经构建了以下结构,并将其添加到我需要查询数据库的限制:

ricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN);

当我按用户数据(姓名、姓氏、ssn 等)搜索时,我得到了用户提供的每个已知地址的记录(见下面我用 db 客户端测试过的 hibernate 查询的简化版本)

    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 类型的对象,每个对象的地址集合都包含所有地址。就像您错过在查询中放置不同的内容一样。我可以重新设计查询,以便每行获得一个地址(对于同一用户仍然有三个结果,但只有一个不同的地址)?注意:用户可能没有提供任何地址。

4

1 回答 1

1

此处描述的解决方案对您有用吗?

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

ricerca.setProjection(Projections.distinct(Projections.property("id")))
于 2011-10-11T16:50:07.793 回答