Hibernate与Jpa的关系,以及使用分页和动态查询

本文探讨了JPA规范及其与Hibernate的关系,解释了JPA、ORM和Spring Data JPA的基本概念。文章指出,Hibernate是JPA的实现之一,提供了对JPA的支持。此外,详细介绍了在Hibernate和Spring Data JPA中如何进行分页和动态查询,包括Specification、HQL和Criteria查询等方法,强调了它们在不同场景下的适用性。
摘要由CSDN通过智能技术生成

今天做不成的事,明天也不会做好。


最近由于项目调动,我去了使用JPA的项目组, 因为之前的项目组使用MyBatis,所以一时间关于JPA和Hibernate的知识体系记得不熟,导致出现了混乱;在网上看到了这篇文章,终于解决了我心中的疑惑:JPA是一种规范,Hibernate实现了这种规范 。
这篇短小精悍的文章给了我很多的启发,于是,我把它”复制”到了本文!


1.原文链接

http://blog.sina.com.cn/s/blog_5f1619e80100yoxz.html


2.内容

我知道Jpa是一种规范,而Hibernate是它的一种实现。除了Hibernate,还有EclipseLink(曾经的toplink),OpenJPA等可供选择,所以使用Jpa的一个好处是,可以更换实现而不必改动太多代码。
在play中定义Model时,使用的是jpa的annotations,比如javax.persistence.Entity, Table, Column, OneToMany等等。但它们提供的功能基础,有时候想定义的更细一些,难免会用到Hibernate本身的annotation。我当时想,jpa这 么弱还要用它干什么,为什么不直接使用hibernate的?反正我又不会换成别的实现。
因为我很快决定不再使用hibernate,这个问题就一直放下了。直到我现在在新公司,做项目要用到Hibernate。
我想抛开jpa,直接使用hibernate的注解来定义Model,很快发现了几个问题:
jpa中有Entity, Table,hibernate中也有,但是内容不同
jpa中有Column,OneToMany等,Hibernate中没有,也没有替代品
我原以为hibernate对jpa的支持,是另提供了一套专用于jpa的注解,但现在看起来似乎不是。一些重要的注解如Column, OneToMany等,hibernate没有提供,这说明jpa的注解已经是hibernate的核心,hibernate只提供了一些补充,而不是两 套注解。要是这样,hibernate对jpa的支持还真够足量,我们要使用hibernate注解就必定要使用jpa。
实际情况是不是这样?在被群里(Scala交流群132569382)的朋友鄙视一番却没有给出满意答案的时候,我又想起了万能的stackoverflow,上去提了两个问:
http://stackoverflow.com/questions/8306742/if-i-want-to-use-hibernate-with-annotation-do-i-have-to-use-javax-persistence
http://stackoverflow.com/questions/8306793/why-jpa-and-hibernate-both-have-entity-and-table-annotations
第一个是问如果想用hibernate注解,是不是一定会用到jpa的。网友的回答:“是。如果hibernate认为jpa的注解够用,就直接用。否则会弄一个自己的出来作为补充”
第二个是问,jpa和hibernate都提供了Entity,我们应该用哪个,还是说可以两个一起用?网友回答说“Hibernate的Entity是继承了jpa的,所以如果觉得jpa的不够用,直接使用hibernate的即可”。

---------------------------------------华丽の分割线------------------------------------------

这两天又仔细研究了一下JPA和Hibernate的使用,把了解到的东西和大家分享一下;先和大家简单讲一下JPA,Hibernate,Spring Data JPA的概念!


1.JPA规范

1.1 什么是JPA

JPA java persistence api ,为POJO(就是我们的JavaBean)提供持久化标准规范,JavaEE规范之一
主要思想,3个:
1. ORM(Object Relational Mapping)映射元数据,通过XML或注解,描述对象和表之间的关系,框架据此将实体对象持久化到数据库
关键字:ORM映射、实体持久化
2. 规范的API,通过操作实体对象,就能执行对应数据库的CRUD操作,ORM框架让开发从繁琐的JDBC和SQL代码中解脱出来
关键字:实体对象、JDBC和SQL、解脱
3. 查询语言,通过面向对象而非面向数据库的查询语言查询数据,避免程序的SQL语句紧密耦合
关键字:面向对象查询、SQL解耦

1.2 JPA和ORM的关系

  1. ORM是JPA规范中的一个体现思想,JPA规范包含了ORM
  2. Sun公司为了简化现有Java EE和Java SE应用的对象持久化的开发工作,整合ORM技术,结束现在Hibernate、iBATIS、TopLink等ORM框架各自为营的局面,提出了新的JPA ORM规范。
  3. JPA的实现者(供应商):Hibernate、OpenJPA、TopLink等

1.3 Hibernate和Hibernate JPA

Hibernate在JPA规范出现后,也提供了对JPA的实现,也就是说Hibernate有两套开发风格,一种我们以前学习的,另一种是JPA风格的。具体demo参考
http://www.micmiu.com/j2ee/hibernate/hibernate-jpa-demo/

1.4 什么是Spring Data和Spring Data JPA

Spring Data 是Spring 的一个子项目(不是很成熟), 旨在统一和简化对各类型持久化存储, 而不拘泥于是关系型数据库还是NoSQL 数据存储。(野心很大)


无论是哪种持久化存储, 数据访问对象&

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值