我有以下hibernate实体
public class Container {
...
@OneToMany
private List<ACLEntry> aclEntries;
}为了保护我的容器实例,我使用以下实体:
public class ACLEntry {
...
private Long sid;
private boolean principal;
private Integer mask;
}hql- query将自动创建,因此为了搜索容器实例,将创建以下查询:
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 join可能返回2个结果,这将导致重复的容器结果。
有谁知道怎么解决这个问题吗?
发布于 2012-05-11 22:11:15
据我所知,您需要一个容器来容纳您的container对象的多个条目,只需将您的hql查询替换为以下查询:
并将select distinct添加为原生查询。
发布于 2012-05-11 22:11:46
作为一种强力解决方案,您可以编写一个原生查询。
发布于 2012-05-11 22:40:37
将其编写为条件查询可能更有意义,即easily supports selecting an object based on conditions of it's associations。
同样的事情也可以在HQL或原生查询中完成,执行指定相同逻辑的条件查询并查看它生成的HQL/SQL可能是有指导意义的。
https://stackoverflow.com/questions/10552945
复制相似问题