JPA是一種規(guī)范摩幔,而hibernate是JPA的一種實(shí)現(xiàn)
JPA全稱為Java Persistence API 鞭铆,Java持久化API是Sun公司在Java EE 5規(guī)范中提出的Java持久化接口。JPA吸取了目前Java持久化技術(shù)的優(yōu)點(diǎn)封断,旨在規(guī)范舶担、簡化Java對(duì)象的持久化工作。使用JPA持久化對(duì)象衣陶,并不是依賴于某一個(gè)ORM框架。
JPA是目前比較流行的一種ORM技術(shù)之一教沾,所以他擁有ORM技術(shù)的各種特點(diǎn),當(dāng)然他還有自己的一些優(yōu)勢(shì):
1 標(biāo)準(zhǔn)化
JPA 是 JCP 組織發(fā)布的 Java EE 標(biāo)準(zhǔn)之一或悲,因此任何聲稱符合 JPA 標(biāo)準(zhǔn)的框架都遵循同樣的架構(gòu)堪唐,提供相同的訪問 API淮菠,這保證了基于JPA開發(fā)的企業(yè)應(yīng)用能夠經(jīng)過少量的修改就能夠在不同的JPA框架下運(yùn)行。
2 對(duì)容器級(jí)特性的支持
JPA 框架中支持大數(shù)據(jù)集合陵、事務(wù)曙寡、并發(fā)等容器級(jí)事務(wù),這使得 JPA 超越了簡單持久化框架的局限举庶,在企業(yè)應(yīng)用發(fā)揮更大的作用户侥。
3 簡單易用,集成方便
JPA的主要目標(biāo)之一就是提供更加簡單的編程模型:在JPA框架下創(chuàng)建實(shí)體和創(chuàng)建Java 類一樣簡單蕊唐,沒有任何的約束和限制,只需要使用 javax.persistence.Entity進(jìn)行注釋钓试;JPA的框架和接口也都非常簡單副瀑,沒有太多特別的規(guī)則和設(shè)計(jì)模式的要求,開發(fā)者可以很容易的掌握挽鞠。JPA基于非侵入式原則設(shè)計(jì),因此可以很容易的和其它框架或者容器集成材义。
4 可媲美JDBC的查詢能力
JPA的查詢語言是面向?qū)ο蠖敲嫦驍?shù)據(jù)庫的嫁赏,它以面向?qū)ο蟮淖匀徽Z法構(gòu)造查詢語句,可以看成是hibernate HQL的等價(jià)物清寇。JPA定義了獨(dú)特的JPQL(Java Persistence Query Language)护蝶,JPQL是EJB QL的一種擴(kuò)展翩迈,它是針對(duì)實(shí)體的一種查詢語言,操作對(duì)象是實(shí)體负饲,而不是關(guān)系數(shù)據(jù)庫的表堤魁,而且能夠支持批量更新和修改、JOIN返十、GROUP BY妥泉、HAVING 等通常只有 SQL 才能夠提供的高級(jí)查詢特性,甚至還能夠支持子查詢洞坑。
5 支持面向?qū)ο蟮母呒?jí)特性
JPA 中能夠支持面向?qū)ο蟮母呒?jí)特性盲链,如類之間的繼承、多態(tài)和類之間的復(fù)雜關(guān)系迟杂,這樣的支持能夠讓開發(fā)者最大限度的使用面向?qū)ο蟮哪P驮O(shè)計(jì)企業(yè)應(yīng)用刽沾,而不需要自行處理這些特性在關(guān)系數(shù)據(jù)庫的持久化。
實(shí)例中使用的注釋列表如下排拷。