我有以下hibernate实体
public class Container {
...
@OneToMany
private List<ACLEntry> aclEntries;
}
为了保护我的容器实例,我使用以下实体:
public class ACLEntry {
...
private Long sid;
private boolean principal;
private Integer mask;
}
将自动创建hql-queries以便搜索容器实例, 将创建以下查询:
select container from Container container
inner join container.aclEntries as aclEntry
with bitwise_and (aclEntry.mask, 1) = 1 and
(aclEntry.sid = :userId or aclEntry.sid = :roleId)
这个问题是,aclentry连接可能返回2个结果,这将导致重复的容器结果。
有谁知道如何解决这个问题?
答案 0 :(得分:1)
据我所知,你需要一个可容纳Container对象的多个条目的容器,只需用以下代码替换你的hql查询:
将select distinct
添加为原生查询。
答案 1 :(得分:0)
作为强力解决方案,您可以编写本机查询。
答案 2 :(得分:0)
将此作为Criteria查询编写可能更有意义,easily supports selecting an object based on conditions of it's associations。
在HQL或本机查询中可以完成同样的事情,执行指定相同逻辑的Criteria查询并查看它生成的HQL / SQL可能是有益的。