4

我有以下休眠实体

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 个结果,这将导致重复的容器结果。

有谁知道如何解决这个问题?

4

3 回答 3

1

据我了解,您需要一个可以容纳 Container 对象的多个条目的容器,只需将您的 hql 查询替换为以下内容:

添加select distinct为本机查询。

于 2012-05-11T14:11:15.190 回答
0

作为蛮力解决方案,您可以编写本机查询。

于 2012-05-11T14:11:46.287 回答
0

将其编写为 Criteria 查询可能更有意义,它可以轻松支持根据关联条件选择对象

同样的事情可以在 HQL 或本机查询中完成,执行指定相同逻辑的 Criteria 查询并查看它生成的 HQL/SQL 可能是有益的。

于 2012-05-11T14:40:37.323 回答