jpa學習一

JPA概要

1、jpa概述

JPA(Java Persistence API)作爲JavaEE5.0平臺標準的ORM規範,將得到所有Java EE服務器的支持。sun公司在充

分吸收現有ORM框架的基礎上,得到了一個易於使用、伸縮性強的ORM規範。從目 前的開發社區的反應上看,JPA

受到了極大的支持和讚揚,JPA作爲ORM領域標準化整合者的目標應該不難實現。JPA通過JDK 5.0註解或XML描述對

象-關係表的映射關係,並將運行期的實體對象持久化到數據庫中,圖1很好地描述了JPA的結構:

 

 

2 實體生命週期

實體生命週期是JPA中非常重要的概念,描述了實體對象從創建到受控、從刪除到遊離的狀態變換。對實體的操作主

要就是改變實體的狀態。

JPA中實體的生命週期如下圖:

 

 

1 New,新創建的實體對象,沒有主鍵(identity)值,也稱初始狀態

2 Managed,有id值,對象處於持久化上下文(Persistence Context)中,被EntityManager管理

3 Detached,遊離狀態,有id值,當對象已經遊離到Persistence Context之外,進入Application Domain

4 Removed, 實體對象被刪除,有id值,和Persistence Context有關聯,但已經準備好從數據庫中刪除。

EntityManager提供一系列的方法管理實體對象的生命週期,包括:

5 persist, 將新創建的或已刪除的實體轉變爲Managed(持久化)狀態,數據存入數據庫。

6 remove,將受控的實體移除掉。

7 merge,將遊離實體轉變爲Managed狀態,數據存入數據庫。

8 refresh,自動刷新。

3、實體關係映射

基本關係映射

實體

數據庫

jpa註解

可變設置

Class(User)

Table(USER)

@Entity

name="t_user"

id

id(primary key)

@Id

@GeneratedValue詳見以下

username(String)

username(varchar)

@Column

name = "username", length = 100

time

time

@Temporal()

TemporalType.DATE  .....

 

@Entity:將域模型標註爲一個實體,表示需要保存到數據庫中,默認情況下類名即爲表名,通過name屬性顯式指定

                表名,如@Entity(name="USER")表示User保存到t_user表中。

@Id :對應的屬性是表的主鍵,

@GeneratedValue:主鍵的產生策略,通過strategy屬性指定。默認情況下,JPA自動選擇一個最適合底層數據庫的

                                 主鍵生成策略,如SqlServer對應identity,MySql對應auto increment。在

                                 javax.persistence.GenerationType中定義了以下幾種可供選 擇的策略:

                              (1)IDENTITY:表自增鍵字段,Oracle不支持這種方式;

                              (2) AUTO:JPA自動選擇合適的策略,是默認選項;

                              (3)SEQUENCE:通過序列產生主鍵,通過@SequenceGenerator註解指定序列名, MySql不

                                                               支持這種方式;

                              (4) TABLE:通過表產生主鍵,框架藉由表模擬序列產生主鍵,使用該策略可以使應用更易於數

                                                       據庫移植。不同的JPA實現商生成的表名是不同的,如OpenJPA生成

                                                       openjpa_sequence_table表Hibernate生成一個hibernate_sequences表,而

                                                     TopLink則生成sequence表。這些表都具有一個序列名和對應值兩個字段,

                                                     如 SEQ_NAME 和SEQ_COUNT。

@Column(name = "TOPIC_ID"):屬性對應的表字段。我們並不需要指定表字段的類型,因爲JPA會根據反射從實體

                                                     屬性中獲取類型;如果是字符串類型,我們可以指定字段長度,以便可以自動生成

                                                      DDL語句,如③處所示;

@Temporal(TemporalType.DATE):如果屬性是時間類型,因爲數據表對時間類型有更嚴格的劃分,所以必須指定具

                                                         體時間類型,如④所示。

在javax.persistence.TemporalType枚舉中定義了3種時間類型:

1) DATE :等於java.sql.Date 

2) TIME :等於java.sql.Time 

3) TIMESTAMP :等於java.sql.Timestamp 

 

今天就先寫到這裏,更多學習資料  it菜鳥營  GZ應屆大學生IT

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章