`
heipark
  • 浏览: 2094897 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Criteria查询 --- 结果集Distinct解决方案2 / 2

阅读更多
Criteria distinct对象结果集

这篇文章是上一篇的续, 主要讲述如何使用Criteria查询distinct后的结果集.

实体:
 
public class Authority {   
  
    private Long id;   
  
    private String name;   
    
    // setter getter method ...    
}  


public class User {   
  
    private Long id;   
  
    private String name;   
  
    private Set<AuthorityUserRelation> authorityUserRelation;
    
    // setter getter method ...    
}  

public class AuthorityUserRelation {

	private User user;

	private Authority authority;
}

权限Authority实体与用户User实体是ManyToMany单向关系,所有通过查询Authority可以找到多个User对象, 但我们希望distinct结果集。下面我们通过Criteria 完成这个distinct查询。

输入字符串"readOnly" 作为权限名称模糊查询条件, 匹配的用户

示例代码:
	Criteria c = manager.createCriteria(User.class, "user");

	DetachedCriteria dc = DetachedCriteria
			.forClass(AuthorityUserRelation.class, "r")
			.add(Restrictions.eqProperty("user.id", "r.user.id"))
			.setProjection(Projections.id());

	dc.createCriteria("r.authority", "a");
	dc.add(Restrictions.ilike("a.name", "readOnly"));

	c.add(Subqueries.exists(dc));

	List result = c.list();


distinct对象结果集的基本思想就是子查询,子查询根据输入条件查询distinct后对象id,外层内存id查询对象。

warning: 外层查询需要指定alias(本例为"user") , 否则会出现throw new MappingException


编后想: 其实有时候我们只需要模型的单独几个属性, 不需要把所有字段都拽出来,这时候可以用投影,但是投影又是基于数组的访问。不知道什么时候hibernate可以把投影查询的字段映射到模型中,没有查询出来的字段为null。这样做列表就会很轻松了:)

结束了, 欢迎讨论指正。转载请保留作者笔名Heipark

参考资料: http://floledermann.blogspot.com/2007/10/solving-hibernate-criterias-distinct.html
分享到:
评论
1 楼 ssuupv 2010-04-19  
你这个问题,还是没解决HQL很好解决的问题,就是数据库分页,出现重复的数据

相关推荐

    Python库 | criteria-etl-1.0a3.tar.gz

    《Python库criteria-etl-1.0a3:数据提取、转换与加载的高效工具》 在信息技术领域,数据处理是至关重要的环节,而Python作为一门强大的编程语言,提供了丰富的库来支持数据处理任务,其中之一便是`criteria-etl`。...

    Hibernate-Criteria 模糊查询

    2. **排序**:`Criteria`允许你指定查询结果的排序规则,使用`addOrder`方法添加`Order`实例。 ```java criteria.addOrder(Order.asc("name")); criteria.addOrder(Order.desc("groupId")); ``` 3. **分页**:...

    WLCSP VMI Pass Fail requirement (criteria)-Flip Chip VI Criteria

    ### WLCSP VMI Pass/Fail Requirement (Criteria) - Flip Chip VI Criteria #### 概述 在微电子封装领域,WLCSP(Wafer Level Chip Scale Package)与Flip Chip技术被广泛应用于各种高性能集成电路(IC)封装。这些...

    Hibernate-Criteria_模糊查询

    5. **执行查询并处理结果**:调用Criteria的list()方法执行查询,返回List集合,遍历集合处理查询结果。 6. **关闭Session和Transaction**:最后,别忘了关闭Session和提交事务。 #### 示例代码 ```java public ...

    Criteria连表查询

    Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询

    Criteria标准化对象查询小例子

    6. **处理结果**: 查询结果通常是一个实体列表,可以根据需要进行进一步处理。 在实际应用中,Criteria API还可以与其他JPA特性结合,如 Specifications,它提供了一种更简洁的方式来构建复杂的查询条件。...

    hibernateCriteria查询

    若要对查询结果进行排序,可以使用`Criteria` 的`addOrder()` 方法。例如,按价格降序排列: ```java Criteria criteria = session.createCriteria(Books.class); criteria.addOrder(Order.desc("price")); List...

    ExtremeLearningMachine资源共享-New-delay-dependent-stability-criteria-for-uncertain-stochastic_2013_Neuroco.pdf

    ExtremeLearningMachine资源共享-New-delay-dependent-stability-criteria-for-uncertain-stochastic_2013_Neuroco.pdf 小弟准备学习ELM,才收集到一些相关资料,发现论坛中并无相关资料,因此把自己手头上收集到...

    node-json-criteria:JSON对象Mongo风格的条件查询

    概括 有关JSON对象Mongo样式的条件查询。安装npm install json-criteria --save用法节点// npm install babel --save// Once at the entrypoint of your app.require('babel/register')var test = require('json-...

    09 Criteria查询方式

    5. **执行查询**:最后,调用Criteria的list()或uniqueResult()方法执行查询,得到查询结果。 举个例子,如果我们有一个User实体类,想查询所有名字为"John"的用户,可以这样写: ```java Session session = ...

    -J-STD-001HA &amp;-A-610HA_EN automotive addendum

    It provides criteria to ensure the reliability of soldered automotive electrical and electronic assemblies in the field under harsh environments and considers automated high-volume production. ...

    Hibernat 使用Criteria查询多对多关系(SET集合)条件

    1. **集合填充问题:** 当查询结果返回后,每个`MainClass`实例的`subs`集合都应被正确填充,包括与之关联的所有`SubClass`实体。如果发现某些实体没有被加载,可能是由于Hibernate的懒加载机制或查询设置问题导致的...

    Hibernate中,利用Criteria查询容器实现sql的写法

    4. **Projections**: 用于定义查询结果的返回类型和形式,比如返回单个字段值、聚合函数结果或整个实体对象。 5. **Order**: 用于设置排序条件,可以指定升序或降序排列。 以下是一个简单的示例,展示如何使用...

    Criteria查询

    Criteria查询教程ppt课件内容详解

    Regularity criteria for the Navier-Stokes-Landau-Lifshitz

    Navier-Stokes-Landau-Lifshitz方程组的正则性准则,樊继山,高洪俊,在本文中, 我们研究了Navier-Stokes-Landau-Lifshitz 方程组正则性准则。利用精细的估计,得到了Navier-Stokes-Landau-Lifshitz 方程组的光滑解...

    criteria介绍与使用

    - 通过`Projections`工具类可以指定查询结果的聚合方式,如`Projections.avg("age")`计算平均年龄。 5. **使用FetchMode** - 可以通过设置`Criteria`对象的`setFetchMode(String propertyName, FetchMode ...

    Criteria.pdf

    - **Projection**:用于指定查询返回的结果集的结构,它可以是聚合函数(如`avg`、`count`、`max`、`min`、`sum`)或者特定的实体属性。`Projection`的使用使得`Criteria`不仅能够执行标准的查询,还能够执行报表...

    前端开源库-waterline-criteria

    此外,社区论坛和Stack Overflow等平台上有许多关于waterline-criteria的讨论和解决方案,有助于开发者解决遇到的问题。 总的来说,waterline-criteria是前端开发中处理数据库查询的一个强大工具,特别是对于使用键...

    DetachedCriteria Criteria 使用方法

    在Spring框架中,可以利用 `HibernateTemplate` 的 `findByCriteria` 方法根据 `DetachedCriteria` 查询结果。 示例代码: ```java List&lt;User&gt; users = hibernateTemplate.findByCriteria(criteria); ``` #### 四...

Global site tag (gtag.js) - Google Analytics