我正在实现一个带有休眠条件的搜索例程来查找注册用户。每个用户可以有一个或多个地址。我已经构建了以下结构,并将其添加到我需要查询数据库的限制:
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 类型的对象,每个对象的地址集合都包含所有地址。就像您错过在查询中放置不同的内容一样。我可以重新设计查询,以便每行获得一个地址(对于同一用户仍然有三个结果,但只有一个不同的地址)?注意:用户可能没有提供任何地址。