JPA criteria 查询:类型安全与面向对象

本文介绍了JPA的Criteria查询,强调其类型安全和面向对象的优势。内容涵盖元模型概念,CriteriaQuery的构建,QueryRoot,过滤查询,执行查询,Expression,复合谓词,连接查询,抓取连接,排序,分组,投影等,并通过示例详细解释了如何使用Criteria API进行安全的类型查询。
摘要由CSDN通过智能技术生成
目录[-]

序言

自工作以来,除了以前比较流量的hibernate,就是一直使用ORM 规范 JPA了.而这几天工作需要,研究了下JPA的标准查询,名为:JPA criteria查询.相比JPQL,其优势是类型安全,更加的面向对象.

使用标准查询,开发人员可在编译的时候就检查查询的正确与否.而以前也只是在Hibernate中听说有过.具体不详,没用过.

JPA元模型概念,及使用

在JPA中,标准查询是以元模型的概念为基础的.元模型是为具体持久化单元的受管实体定义的.这些实体可以是实体类,嵌入类或者映射的父类.提供受管实体元信息的类就是元模型类.

描述受管类的状态和他们之间的关系的静态元模型类可以

  • 1.从注解处理器产生
  • 2.从程序产生
  • 3.用EntityManager访问.

如下code,一个简单的实体类package com.demo.entities;下,实体类Employee ,假设该实体有诸如id,name和age的基本属性,还有与类Address的OneToMany关联:

01 @Entity
02 @Table
03 public class Employee{ 
04     private int id;  
05     private String name;
06     private int age;
07     @OneToMany
08     private List<Address> addresses;
09     // Other code…
10 }

Employee类(com.demo.entities包中定义)的标准元模型类的名字将是使用 javax.persistence.StaticMetamodel注解的Employee_。元模型类的属性全部是static和public的。Employee的每一个属性都会使用在JPA2规范中描述的以下规则在相应的元模型类中映射:

  • 诸如id,name和age的非集合类型,会定义静态属性SingularAttribute<A, B> b,这里b是定义在类A中的类型为B的一个对象。
  • 对于Addess这样的集合类型,会定义静态属性ListAttribute<A, B> b,这里List对象b是定义在类A中类型B的对象。其它集合类型可以是SetAttribute, MapAttribute 或 CollectionAttribute 类型。

 以下是用注解处理器产生的元模型类package com.demo.entities;下:

01 import javax.annotation.Generated;
02 import javax.persistence.metamodel.SingularAttribute;
03 import javax.persistence.metamodel.ListAttribute;
04 import javax.persistence.metamodel.StaticMetamodel;
05 @Generated("org.hibernate.jpamodelgen.JPAMetaModelEntityProcesso")
06 @StaticMetamodel(Employee.class)
07 public class Employee_ {    
08     public static volatile SingularAttribute<Employee, Integer> id;  
09     public static volatile SingularAttribute<Employee, Integer> age;  
10     public
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值