不同的内连接hql

时间:2012-05-11 14:05:13

标签: java hibernate hql

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

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

3 个答案:

答案 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可能是有益的。