使用Hibernate的JPA 2.0标准查询
数据库表:
例如,下面有两个数据库表:
- 状态[stateId,stateName]
- 城市[cityId,stateId(FK#),CityName]
Select * from City c, State s where c.stateId = s.stateId and c.stateId = ? and c.cityName like "M%" order by c.cityName
JPA实体:
STATE表的Java实体
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import java.util.Date;
import java.util.Set;
import javax.persistence.SequenceGenerator;@Entity
@Table(name="STATE")
@SequenceGenerator(sequenceName="STATE_SEQ",name="STATE_SEQ_GEN")
public class State {private Long stateId;private String stateName;private Set citySet;@Id@Column(name="stateId")@GeneratedValue(generator="STATE_SEQ_GEN",strategy=GenerationType.SEQUENCE)public Long getStateId;() {return stateId;}public void setId(long stateId) {stateId = stateId;}@Column(name="stateName")public String getStateName() {return stateName;}public void setStateName(String stateName) {this.stateName = stateName;}public void setCitySet(Set citySet)this.citySet= citySet;}@OneToMany(fetch=FetchType.LAZY,cascade=CascadeType.ALL,mappedBy="state")public Set getCitySet() {return citySet;}
}
CITY表的Java实体
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;@Entity
@Table(name="CITY")
@SequenceGenerator(sequenceName="CITY_SEQ",name="CITY_SEQ_GEN")
public class City {private Long cityId;private String cityName;private State state;public void setId(long cityId) {this.cityId = cityId;}@Id@Column(name="CityId")@GeneratedValue(generator="CITY_SEQ_GEN",strategy=GenerationType.SEQUENCE)public Long getCityId() {return cityId;}@Column(name="CityName")public void setContent(String cityName) {this.cityName = cityName;}public String getCityName() {return cityName;}public void setState(State state) {this.state = state;}@ManyToOne(fetch = FetchType.LAZY)@JoinColumn(name = "STATEID", nullable = false)public state getState() {return state;}
}
值对象(POJO):
public class StateVO {private Long stateId;private String stateName;private Set cityVOSet;// All getter setters}
public class CityVO {private Long cityId;private String cityName;private StateVO stateVO;public CityVO( Long cityId, String cityName){this.cityId=cicityId;this.cityName=cityName;}// All getter setters
}
DAO实施:
import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;public class StateCityDAOImpl{public List getCityList(StateVO searchStateVO) {// Get the entity manager instanceEntityManagerFactory emf = Persistence.createEntityManagerFactory("StateCityService");EntityManager entityManager= emf.createEntityManager();// Get the criteria builder instance from entity managerfinal CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();// Create criteria query and pass the value object which needs to be populated as resultfinal CriteriaQuery criteriaQuery = criteriaBuilder.createQuery(CityVO.class);// Tell to criteria query which tables/entities you want to fetch// To join the City and State tables, we need to write below codefinal Root stateRoot = criteriaQuery.from(State.class);final Root cityRoot = criteriaQuery.from(City.class);// Time to define where clause in terms of Predicates// This list will contain all Predicates (where clauses)List criteriaList = new ArrayList();// Note: Ensure that whatever string you are passing in root variables// It should be matched with variables' name in entity classes// [1] where condition: State.StateId = City.StateIdPredicate predicate1 = criteriaBuilder.equal(cityRoot. get("state"). get("stateId"),stateRoot. get("stateId"));criteriaList.add(predicate1);// [2] where condition: City.StateId = ?if (searchStateVO.getStateId() != null) {Predicate predicate2= criteriaBuilder.equal(cityRoot. get("state"). get("stateId"),searchStateVO.getStateId());criteriaList.add(predicate2);}// [3] where condition: City.cityName like 'M%'Predicate predicate3= criteriaBuilder.like(criteriaBuilder.upper(cityRoot. get("cityName")),"M%");criteriaList.add(predicate3); // This statement maps your CityVO with result data// You have to have a custom constructor in CityVO (see above) to populate the result data criteriaQuery.select(criteriaBuilder.construct(CityVO.class, cityRoot. get("cityId"),cityRoot. get("cityName")));// Pass the criteria list to the where method of criteria querycriteriaQuery.where(criteriaBuilder.and(criteriaList.toArray(new Predicate[0])));// Order by clause based on city namescriteriaQuery.orderBy(criteriaBuilder.asc(cityRoot. get("cityName")));// Here entity manager will create actual SQL query out of criteria queryfinal TypedQuery query = entityManager.createQuery(criteriaQuery);// This code can be used to define the row range to fetch the result/* if (CitySize != 0) {query.setFirstResult(startIndex); // starting row indexquery.setMaxResults(endIndex); // end row index}*/return query.getResultList();}
参考:我们的JCG合作伙伴 Narendra Verma在NS.Infra博客上的《 使用Hibernate进行JPA 2.0标准查询》 。
翻译自: https://www.javacodegeeks.com/2013/04/jpa-2-0-criteria-query-with-hibernate.html
使用Hibernate的JPA 2.0标准查询相关推荐
- 详解JPA 2.0动态查询机制:Criteria API
转载自详解JPA 2.0动态查询机制:Criteria API-51CTO.若有侵权,请留言删除. 自从 JPA 于 2006 年首次被引入之后,它就得到了 Java 开发社区的广泛支持.该规范的下一 ...
- 详解JPA 2.0动态查询机制:Criteria API(2)
详解JPA 2.0动态查询机制:Criteria API(2) 2009-11-13 09:24 Pinaki Poddar IBMDW 字号:T | T JPA 2.0引入了 Criteria AP ...
- jpa中::::_项目学生:JPA标准查询
jpa中:::: 这是Project Student的一部分. 其他职位包括带有Jersey的Webservice Client,带有Jersey的 Webservice Server , 业务层 , ...
- 项目学生:JPA标准查询
这是Project Student的一部分. 其他职位包括带有Jersey的Webservice Client,带有Jersey的 Webservice Server , 业务层 , 具有Spring ...
- JPA 2.0 中的动态类型安全查询
如何通过 Criteria API 构建动态查询并减少运行时失败 如果编译器能够对查询执行语法正确性检查,那么对于 Java 对象而言该查询就是类型安全的.Java™Persistence API ( ...
- JPA 2.0 中的动态类型安全查询(如何通过 Criteria API 构建动态查询并减少运行时失败)...
简介: 如果编译器能够对查询执行语法正确性检查,那么对于 Java 对象而言该查询就是类型安全的.Java™Persistence API (JPA) 的 2.0 版本引入了 Criteria AP ...
- 一起谈.NET技术,NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...
- NHibernate3.0剖析:Query篇之NHibernate.Linq标准查询
系列引入 NHibernate3.0剖析系列分别从Configuration篇.Mapping篇.Query篇.Session策略篇.应用篇等方面全面揭示NHibernate3.0新特性和应用及其各种 ...
- ORM框架之Spring Data JPA(一)Hibernate实现JPA规范
一.ORM简述 ORM(Object-Relational Mapping) 表示对象关系映射.在面向对象的软件开发中,通过ORM,就可以把对象映射到关系型数据库中.只要有一套程序能够做到建立对象与数 ...
最新文章
- 【手写数据结构】双链表最详细图解
- 全球及中国微电网市场规模容量及建设运营模式分析报告2021年版
- 服务器做文件共享服务特点,服务器主机做共享文件
- SqlTransaction——事务详解 [转]
- .NET Conf 2021 正在进行中,带你看一看微软带来了什么内容
- 18.IDA-创建自己的sig(创建自己的标签)
- 【bzoj4653】[Noi2016]区间 双指针法+线段树
- java实现mqtt服务端_基于Swoole使用MQTT协议连接阿里云物联网平台设备实现消息订阅
- zabbix监控 nginx 进程
- Rainmeter RocketDock丨Windows美化工具
- 绘制微信小程序画布时钟
- 计算机毕业设计asp.net学院网站系统VS开发sqlserver数据库web结构c#编程计算机网页源码项目
- 原理图与 PCB 绘制备忘
- 计算机老师三年发展规划,信息技术专业教师个人发展三年规划汇总(全).doc
- 【USB笔记】USB 2.0 帧开始包Start-of-Frame Packets
- 手机投屏不是全屏怎么办_手机投屏win10怎么退出全屏详细图文教程
- Sleep()简析 和Sleep(0)的妙用
- Android学习——在线支付
- MySQL数据库操作——增删查改
- java素数的流程图_Java程序流程结构
热门文章
- mysql sample函数_Oracle SAMPLE 语法应用
- python setup.py 指定文件到指定路径_linux下python安装到指定目录
- excel趋势线公式导出_如何用Excel进行预测分析?
- 利用 GregorianCalendar 制作当前月的月历
- java.线程池 线程数_如何在线程“ main”中修复异常java.lang.NoClassDefFoundError:Java中的org / slf4j / LoggerFactory...
- kata_小规模流处理kata。 第2部分:RxJava 1.x / 2.x
- java 开发 jvm_Java开发人员应了解的JVM流行语
- sts集成jboss_JBoss BPM Travel Agency演示与现代BPM数据集成
- c语言中如何让诊断代码右移_如何检测和诊断生产中的慢代码
- 使用Java和JSF构建一个简单的CRUD应用