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
分享到:
相关推荐
《Python库criteria-etl-1.0a3:数据提取、转换与加载的高效工具》 在信息技术领域,数据处理是至关重要的环节,而Python作为一门强大的编程语言,提供了丰富的库来支持数据处理任务,其中之一便是`criteria-etl`。...
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(Wafer Level Chip Scale Package)与Flip Chip技术被广泛应用于各种高性能集成电路(IC)封装。这些...
5. **执行查询并处理结果**:调用Criteria的list()方法执行查询,返回List集合,遍历集合处理查询结果。 6. **关闭Session和Transaction**:最后,别忘了关闭Session和提交事务。 #### 示例代码 ```java public ...
Hibernate中的Criteria连表查询,包括单表属性查询,多表内连,以及左外连接查询
6. **处理结果**: 查询结果通常是一个实体列表,可以根据需要进行进一步处理。 在实际应用中,Criteria API还可以与其他JPA特性结合,如 Specifications,它提供了一种更简洁的方式来构建复杂的查询条件。...
若要对查询结果进行排序,可以使用`Criteria` 的`addOrder()` 方法。例如,按价格降序排列: ```java Criteria criteria = session.createCriteria(Books.class); criteria.addOrder(Order.desc("price")); List...
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. ...
ExtremeLearningMachine资源共享-New-delay-dependent-stability-criteria-for-uncertain-stochastic_2013_Neuroco.pdf 小弟准备学习ELM,才收集到一些相关资料,发现论坛中并无相关资料,因此把自己手头上收集到...
概括 有关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-...
5. **执行查询**:最后,调用Criteria的list()或uniqueResult()方法执行查询,得到查询结果。 举个例子,如果我们有一个User实体类,想查询所有名字为"John"的用户,可以这样写: ```java Session session = ...
1. **集合填充问题:** 当查询结果返回后,每个`MainClass`实例的`subs`集合都应被正确填充,包括与之关联的所有`SubClass`实体。如果发现某些实体没有被加载,可能是由于Hibernate的懒加载机制或查询设置问题导致的...
4. **Projections**: 用于定义查询结果的返回类型和形式,比如返回单个字段值、聚合函数结果或整个实体对象。 5. **Order**: 用于设置排序条件,可以指定升序或降序排列。 以下是一个简单的示例,展示如何使用...
Criteria查询教程ppt课件内容详解
Navier-Stokes-Landau-Lifshitz方程组的正则性准则,樊继山,高洪俊,在本文中, 我们研究了Navier-Stokes-Landau-Lifshitz 方程组正则性准则。利用精细的估计,得到了Navier-Stokes-Landau-Lifshitz 方程组的光滑解...
- 通过`Projections`工具类可以指定查询结果的聚合方式,如`Projections.avg("age")`计算平均年龄。 5. **使用FetchMode** - 可以通过设置`Criteria`对象的`setFetchMode(String propertyName, FetchMode ...
- **Projection**:用于指定查询返回的结果集的结构,它可以是聚合函数(如`avg`、`count`、`max`、`min`、`sum`)或者特定的实体属性。`Projection`的使用使得`Criteria`不仅能够执行标准的查询,还能够执行报表...
此外,社区论坛和Stack Overflow等平台上有许多关于waterline-criteria的讨论和解决方案,有助于开发者解决遇到的问题。 总的来说,waterline-criteria是前端开发中处理数据库查询的一个强大工具,特别是对于使用键...
在Spring框架中,可以利用 `HibernateTemplate` 的 `findByCriteria` 方法根据 `DetachedCriteria` 查询结果。 示例代码: ```java List<User> users = hibernateTemplate.findByCriteria(criteria); ``` #### 四...