//hibernate 3.5.1
// //Simple Query
Query query = entityManager.createQuery("from SimpleBean s");
List<SimpleBean> list = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root<SimpleBean> from = criteriaQuery.from(SimpleBean.class);
CriteriaQuery<Object> select = criteriaQuery.select(from);
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();
assertEqualsList(list, resultList);
// //Simple Query with Order
List<SimpleBean> expected= entityManager.createQuery("from SimpleBean s order by s.pbyte asc ,s.pint desc").getResultList();
//...
CriteriaQuery<Object> select = criteriaQuery.select(from);
select.orderBy(criteriaBuilder.asc(from.get("pbyte")),criteriaBuilder.desc(from.get("pint")));
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
//...
// //Simple Query with selected fields
Query query = entityManager.createQuery("select s.id,s.pbyte from SimpleBean s ");
List listExpected = query.getResultList();
//...
CriteriaQuery<Object> select = criteriaQuery.multiselect(from.get("id"),from.get("pbyte"));
// //Query with single criteria
int arg1 = 20000;
Query query = entityManager.createQuery("from SimpleBean s where s.pint>=:arg1");
query.setParameter("arg1", arg1);
List<SimpleBean> list = query.getResultList();
//...
CriteriaQuery<Object> select = criteriaQuery.select(from);
Predicate predicate = criteriaBuilder.ge(from.get("pint"), arg1);
criteriaQuery.where(predicate);
//...
// //Query with multiple criterias
int arg1 = 20000;
int arg2 = 50000;
Query query = entityManager.createQuery("from SimpleBean s where s.pint>=:arg1 and s.pint<=:arg2");
query.setParameter("arg1", arg1);
query.setParameter("arg2", arg2);
List<SimpleBean> list = query.getResultList();
//..
Predicate predicate1 = criteriaBuilder.ge(from.get("pint"), arg1);
Predicate predicate2 = criteriaBuilder.le(from.get("pint"), arg2);
criteriaQuery.where(criteriaBuilder.and(predicate1, predicate2));
//..
// //Query with single literal
String arg1 = "name";
Query query = entityManager.createQuery("from SimpleBean s where upper(s.pstring) like upper(:arg1)");
query.setParameter("arg1", arg1);
List<SimpleBean> list = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root from = criteriaQuery.from(SimpleBean.class);
CriteriaQuery<Object> select = criteriaQuery.select(from);
Expression<String> literal = criteriaBuilder.upper(criteriaBuilder.literal((String) arg1));
Predicate predicate = criteriaBuilder.like(criteriaBuilder.upper(from.get("pstring")), literal);
criteriaQuery.where(predicate);
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();
assertEqualsList(list, resultList);
// //Query with summary (min,max,avg)
Query query = entityManager.createQuery("select min(s.pint) from SimpleBean s");
Object minActual = query.getSingleResult();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root from = criteriaQuery.from(SimpleBean.class);
Expression minExpression = criteriaBuilder.min(from.get("pint"));
CriteriaQuery<Object> select = criteriaQuery.select(minExpression);
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
Object minExpected = typedQuery.getSingleResult();
assertEquals(minActual, minExpected);
// //Query with aggreation (group by)
Query query = entityManager.createQuery("select min(s.pint),s.pbyte from SimpleBean s group by s.pbyte");
List listExpected = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root from = criteriaQuery.from(SimpleBean.class);
Expression minExpression = criteriaBuilder.min(from.get("pint"));
Path pbytePath = from.get("pbyte");
CriteriaQuery<Object> select = criteriaQuery.multiselect(minExpression, pbytePath);
CriteriaQuery<Object> groupBy = select.groupBy(pbytePath);
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List listActual = typedQuery.getResultList();
// //Simple Join query
long category=200L;
Query query = entityManager.createQuery("select s from OrderItem s " +
"where s.product.category=:cat");
query.setParameter("cat", category);
List<OrderItem> list = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root<OrderItem> from = criteriaQuery.from(OrderItem.class);
Path<Object> path = from.join("product").get("category");
CriteriaQuery<Object> select = criteriaQuery.select(from);
select.where(criteriaBuilder.equal(path, category));
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();
assertEqualsList(list, resultList);
// //simple fetch join query
long category=200L;
Query query = entityManager.createQuery("select s from OrderItem s " +
"join fetch s.product where s.product.category=:cat");
query.setParameter("cat", category);
List<OrderItem> list = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root<OrderItem> from = criteriaQuery.from(OrderItem.class);
Path<Object> path = from.join("product").get("category");
from.fetch("product"); //FETCH product
CriteriaQuery<Object> select = criteriaQuery.select(from);
select.where(criteriaBuilder.equal(path, category));
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();
assertEqualsList(list, resultList);
// //subselect (subquery) join query
Query query = entityManager.createQuery(
"select s from OrderItem s join fetch s.product" +
" where s.product.category in" +
" (select sb.pbyte from SimpleBean sb where sb.pint>=30000)");
List<OrderItem> list = query.getResultList();
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
Root<OrderItem> from = criteriaQuery.from(OrderItem.class);
Path<Object> path = from.join("product").get("category");
from.fetch("product");
CriteriaQuery<Object> select = criteriaQuery.select(from);
Subquery<SimpleBean> subquery = criteriaQuery.subquery(SimpleBean.class);
Root fromSimpleBean = subquery.from(SimpleBean.class);
subquery.select(fromSimpleBean.get("pbyte"));
subquery.where(criteriaBuilder.ge(fromSimpleBean.get("pint"),30000));
select.where(criteriaBuilder.in(path).value(subquery));
TypedQuery<Object> typedQuery = entityManager.createQuery(select);
List<Object> resultList = typedQuery.getResultList();
assertEqualsList(list, resultList);
分享到:
相关推荐
为了解决这一问题,kotlin-jpa-specification-dsl应运而生,它提供了一种流畅的领域特定语言(DSL),使得利用Spring Data JPA的Criteria API进行查询变得更加简单和直观。 Spring Data JPA是Spring Framework的一...
JPA 2.0 引入了 Criteria API,它提供了一种动态查询机制,允许开发者在运行时构建查询语句。在本文中,我们将详解 Criteria API 和 JPQL 语法的详细信息。 Criteria API 是什么? Criteria API 是 JPA 2.0 中的一...
它支持方法命名查询、注解查询以及基于JPA Criteria API的动态查询。 在描述中提到的"常用查询场景"包括了单表查询部分字段、联合查询映射自定义对象以及动态SQL。这些是数据库操作的常见需求: 1. **单表查询部分...
- **JPA Criteria API 支持**:通过 JPA Criteria API,可以构建复杂的查询条件。 3. **1.1.0.RC1 版本更新** - **性能优化**:RC1 版本可能包含对查询执行性能的优化,提高数据访问效率。 - **新功能引入**:...
除了基于方法名的查询外,Spring Data JPA还支持使用Criteria API来构建复杂的动态查询。这是一种类型安全的API,可以避免SQL拼接错误。 6. **Transaction管理** Spring Data JPA整合了Spring的事务管理,可以...
4. **JPA Criteria API 分页**:JPA Criteria API提供了一种更现代、类型安全的查询方式。使用`javax.persistence.criteria.Pagination`接口可以创建分页查询。 为了提高移植性,开发者应该关注以下几点: - **...
- **Criteria API与JPA Criteria API的区别**:虽然两者在某些功能上相似,但仍有差异,例如JPA Criteria API是标准的,而Hibernate Criteria API则包含更多扩展功能。 - **事务管理**:熟悉Hibernate的事务API,...
JPA简化了数据库操作,使得开发更加面向对象,同时提供了事务管理和查询语言JPA Criteria API。 **集成Spring MVC和JPA** 集成Spring MVC和JPA可以实现高效且灵活的数据访问。首先,需要在Spring的配置文件中声明...
老版本的Hibernate提供了Criteria API,允许通过构建Criteria对象来执行动态查询,虽然在新版本中被JPA Criteria API取代,但在某些场景下仍具有使用价值。 10. **org.hibernate.transform package** 提供了结果...
此外,该版本还支持了动态查询,通过 `Querydsl` 或 `JPA Criteria API` 可以构建更复杂的查询逻辑,以适应不同的业务需求。这种方式允许开发者在运行时根据条件动态构造查询,增加了代码的灵活性。 在事务管理方面...
对于更复杂的查询,SpringDataJPA提供了Criteria API。它允许开发者动态构建查询条件,提高了代码的可读性和可维护性。 6. **事务管理** SpringBoot自动配置了事务管理器,可以使用`@Transactional`注解来开启...
4. ** Criteria 查询**: 提供一个类型安全的API,允许在运行时构建查询,避免了SQL注入的问题。 5. **级联操作**: 通过`@OneToMany`、`@ManyToOne`和`@ManyToMany`注解,可以定义实体之间的关系,并设置级联操作,...
8. **Criteria API与JPA Criteria API**:虽然两者名字相似,但在Hibernate中,JPA Criteria API是按照Java Persistence API标准实现的,而Hibernate Criteria API是其特有功能,两者可以结合使用。 9. **二级缓存*...
JPA 2.1引入了类型安全的 Criteria API,可以更安全地构建动态查询,避免SQL注入。 - **多版本并发控制**: JPA 2.1引入了乐观锁和悲观锁策略,用于解决多线程环境下的数据一致性问题。 - **级联操作**: 支持在实体...
4. JPA Criteria API:提供动态构建查询的能力,比直接写SQL更灵活且安全。 5. 自动事务管理:Spring Data JPA结合Spring的事务管理,可以实现声明式事务,简化事务控制。 五、最佳实践 1. 数据库设计:遵循数据库...
**JPA(Java Persistence API)**是Java平台上的一个标准,用于管理关系数据库中的数据,它简化了在Java应用程序中存储、检索和管理对象-关系映射(ORM)的工作。JPA通过提供一套API和元数据来定义如何将Java类映射...
此外,5.2版本还强化了对JPA Criteria API的实现,使其更加强大且易于使用。 最后,Hibernate5.6版本是目前的一个较新版本,它带来了更多改进和新特性。这个版本继续强化了对JPA规范的支持,特别是JPA 2.2版本的...
五、JPA Criteria API分页 如果你使用的是JPA,可以使用`Pageable`接口进行分页。 ```java Pageable pageable = PageRequest.of(pageNumber, pageSize); Page<User> page = userRepository.findAll(pageable); List...
在仓库管理系统中,Spring Data JPA可能被用来定义Repository接口,实现对仓库数据的CRUD操作,同时提供了高级查询功能,如JPA Criteria API,使数据库操作更加灵活高效。 **MyBatis** MyBatis是一个优秀的持久层...
6. Criteria API增强:Hibernate在JPA的基础上扩展了Criteria API,提供了更丰富的查询表达能力。例如,`org.hibernate.criterion`包下的类提供了更复杂的比较和逻辑运算。 7. Event Listeners:Hibernate允许...