Parent表中有一个外键关联时, 需要查询外键对就表中的数据:
Criteria criteria = this.getCriteria(Parent.class);
//连接关联子对象child,且指定了连接方式为左外连接
criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));
criteria.add(Expression.eq("c.name", "wander"));
List list = criteria.list();
但list里面并不是Parent类型的.而是Object[]的类型, 存放一个parent类型和一个children类型, 因此关联查询和非关联查询应该分开, 或进行一下结合:
方法一:
criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));
criteria.add(Expression.eq("c.name", "wander"));
List list = criteria.returnMaps().list();
Iterator iter = cats.iterator();
while ( iter.hasNext() ) {
Map map = (Map) iter.next();
Parent parent= (Parent) map.get(Criteria.ROOT_ALIAS);
Children c= (Children) map.get("c");
}
方法二:
criteria.createAlias("children", "c", CriteriaSpecification.LEFT_JOIN));
criteria.add(Expression.eq("c.name", "wander"));
List list = criteria.returnMaps().list();
List listTemp = new ArrayList(list.size());
for (Object obj : listTemp) {
if (obj instanceof Object[]) {
for (Object innerObj : (Object[])obj) {
if (criteria instanceof CriteriaImpl &&
innerObj.getClass().getName().equals(((CriteriaImpl)criteria).getEntityOrClassName())) {
list.add(innerObj);
break;
}
}
} else {
list = listTemp;
break;
}
}
分享到:
相关推荐
- `transform(ResultTransformer transformer)`: 转换查询结果。例如,`Transformers.aliasToBean(User.class)`将结果转换为User对象列表。 ```java criteria.setProjection(Projections.projectionList() .add...
在Hibernate中,Criteria API提供了一种类型安全的方式来执行查询,它允许开发者通过编程的方式创建查询,而不是硬编码SQL。这种API的主要优点在于它的灵活性和可扩展性,可以方便地与业务逻辑相结合,减少代码重复...
这篇博客文章“Hibernate中,利用Criteria查询容器实现sql的写法”可能详细讲解了如何使用Criteria API来构建复杂的查询条件,并将其转化为对应的SQL语句。 Criteria查询的基本使用步骤包括以下几个方面: 1. 创建...
Criteria API也支持连接查询,通过`createCriteria(String associationPath)`方法创建关联的Criteria。例如,查询所有有项目的用户: ```java criteria.createCriteria("projects").add(Restrictions.isNotEmpty(...
Criteria API提供了一种类型安全的方式来构建SQL查询,避免了直接操作字符串造成的潜在错误。它的主要优点在于可以在运行时动态地构造查询,这在处理复杂的、基于条件的查询时特别有用。以下是对Criteria API的主要...
Criteria API 还支持将查询结果转换为其他对象,比如 `List`、`Map` 或自定义的集合类型,这需要配合 `Transformer` 使用。 ```java criteria.setProjection(Projections.property("property")) ....
在Criteria查询中,我们可以通过`criteria.add(Criterion)`添加查询条件,`criteria.setFetchMode("association", FetchMode.JOIN)`设置联合查询模式,`criteria.setOrder(Order.asc("name"))`设置排序,`criteria....
当你需要执行查询时,再将DetachedCriteria转换为Criteria并应用于Session: ```java Criteria attachedCriteria = detchedCriteria.getExecutableCriteria(session); List<Person> list = attachedCriteria....
1. **Criteria接口**:是Criteria API的主要入口,提供了创建查询的基本构造方法,如`add()`用于添加限制条件,`setResultTransformer()`用于结果转换,`createAlias()`和`createCriteria()`用于关联查询。...
批量更新通常涉及SQL的IN子句,或者使用Criteria API和HQL(Hibernate Query Language)进行复杂查询。批量操作能显著提升性能,尤其是在处理大量数据时。此外,Spring的JdbcTemplate和NamedParameterJdbcTemplate也...
可以使用 `setFetchMode()` 方法设置关联查询的fetch模式,例如: `List cats = sess.createCriteria(Cat.class)` `.add(Restrictions.like("name", "Fritz%"))` `.setFetchMode("mate", FetchMode.EAGER)` `....
Criteria API支持添加多个限制条件、关联查询和排序等。 3. **Query API** JPA 2.0引入的Query API在Hibernate中也得到了支持,它提供了一种统一的查询接口,适用于JPA和HQL。例如,执行一个简单的HQL查询: ```...
Criteria API提供了一种类型安全的方式来构建动态查询。它允许在运行时构造查询,避免了字符串拼接造成的潜在错误。使用Criteria API进行多表连接查询,可以通过`createAlias()`方法来指定关联关系: ```java ...
例如,通过`Criteria API`或`HQL`(Hibernate Query Language)进行多表联接查询,可以将查询结果转化为Object数组。这种方法简单直观,但缺乏类型安全,因为数组中的每个元素都是Object,需要在代码中进行强制类型...
Criteria查询的优势在于其强类型的安全性和代码的可读性。下面,我们将详细探讨Hibernate中Criteria查询的使用方法。 1. 创建Criteria对象:通过Session的createCriteria()方法,我们可以得到一个Criteria对象,这...
5. **投影与转换**:可以用Criteria的setProjection()方法选择查询返回的结果集,甚至可以将结果转换为自定义的对象集合。 **QBE(Query By Example)** QBE是一种基于对象实例的查询方式,它的理念是创建一个对象...
为了优化查询性能,可以设置`Fetch Mode`为`JOIN`来预加载关联的对象。例如,查询部门及其员工时: ```java Criteria crite = session.createCriteria(Department.class) .setFetchMode("employees", FetchMode....
在测试过程中,我们应关注查询性能、事务处理、异常处理以及实体关联的正确性。 接下来,让我们看看`源码`层面。深入Hibernate的源码可以帮助我们理解其内部工作流程,比如查询解析、SQL生成、执行计划制定等。例如...
2. **Criteria API**:这是JPA提供的另一种进行复杂查询的方式,它提供了一种类型的API,用于动态构建查询表达式。通过Criteria API,你可以创建CriteriaQuery对象,设置Root(根实体),然后添加Join条件,最后通过...
在下拉框查询场景中,Hibernate通过HQL(Hibernate Query Language)或者 Criteria API 查询数据库,获取下拉框所需的数据,然后转换为Java对象,供上层业务逻辑使用。 其次,数据库选用SQL Server 2012,这是一款...