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

如何使用条件在Hibernate中为每个用户地址获取不同的用户实体,hibernate,hibernate-criteria,Hibernate,Hibernate Criteria,我正在使用hibernate标准实现一个搜索例程来查找注册用户。每个用户可以有一个或多个地址。我构建了以下结构,并将其添加到查询数据库所需的restrictions中: ricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN); 当我按用户数据(姓名、姓氏、ssn等)搜索时,我得到了用户提供的每个已知地址的记录(见下面我用db客户端测试的hibernate查询的简化版本) Mar

我正在使用hibernate标准实现一个搜索例程来查找注册用户。每个用户可以有一个或多个地址。我构建了以下结构,并将其添加到查询数据库所需的restrictions中:

ricerca = s.createCriteria(User.class).createAlias("addresses","a",Criteria.LEFT_JOIN);
当我按用户数据(姓名、姓氏、ssn等)搜索时,我得到了用户提供的每个已知地址的记录(见下面我用db客户端测试的hibernate查询的简化版本)

Mario有三个地址,db客户机返回三条记录:这对我来说没问题,但hibernate返回三个User类型的对象,每个对象都有addresses集合和所有地址。这就像在查询中没有输入distinct一样。 我是否可以重新设计查询,以便每行获得一个地址(对于同一个用户仍然有三个结果,但只有一个不同的地址)?
注意:用户可能没有提供任何地址

所描述的解决方案适合您吗

它要求在用户id上使用
distinct
投影来获得用户id,然后根据需要添加它们

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

好的,投影找到所有不同的用户Id,然后我必须“水合”它们:这是我的第一个hibernate项目,我想它意味着按Id检索每个用户。我不得不从用户映射文件中删除地址集合上的order by子句,这导致hibernate生成错误的sql查询。有一种方法可以通过hibernate将排序应用于分离的用户实体,否则我必须编写地址比较器?谢谢你的回答
ricerca.setProjection(Projections.distinct(Projections.property("id")))