首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >distinct inner join hql

distinct inner join hql
EN

Stack Overflow用户
提问于 2012-05-11 22:05:13
回答 3查看 1.3K关注 0票数 4

我有以下hibernate实体

代码语言:javascript
复制
public class Container {
  ...

  @OneToMany
  private List<ACLEntry> aclEntries;
}

为了保护我的容器实例,我使用以下实体:

代码语言:javascript
复制
public class ACLEntry {

  ...
  private Long sid;
  private boolean principal;
  private Integer mask;

}

hql- query将自动创建,因此为了搜索容器实例,将创建以下查询:

代码语言:javascript
复制
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个结果,这将导致重复的容器结果。

有谁知道怎么解决这个问题吗?

EN

回答 3

Stack Overflow用户

发布于 2012-05-11 22:11:15

据我所知,您需要一个容器来容纳您的container对象的多个条目,只需将您的hql查询替换为以下查询:

并将select distinct添加为原生查询。

票数 1
EN

Stack Overflow用户

发布于 2012-05-11 22:11:46

作为一种强力解决方案,您可以编写一个原生查询。

票数 0
EN

Stack Overflow用户

发布于 2012-05-11 22:40:37

将其编写为条件查询可能更有意义,即easily supports selecting an object based on conditions of it's associations

同样的事情也可以在HQL或原生查询中完成,执行指定相同逻辑的条件查询并查看它生成的HQL/SQL可能是有指导意义的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10552945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档