日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java EE中JPA介绍

發布時間:2024/1/23 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java EE中JPA介绍 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

全稱是:Java Persistence API (java 持久化應用接口),是由sun公司帶頭制定的。由于目前有很多java持久層的框架,比如Hibernate、TopLink、OpeanJPA等等

JPA的總體思想和現有hibernate、TopLink,JDO等ORM框架大體一致。總的來說,JPA包括以下3方面的技術:
  1. ORM映射元數據,JPA支持XML和JDK 5.0注解兩種元數據的形式,元數據描述對象和表之間的映射關系,框架據此將實體對象持久化到數據庫表中;
  2. JPA的API,用來操作實體對象,執行CRUD操作,框架在后臺替我們完成所有的事情,開發者從繁瑣的JDBC和SQL代碼中解脫出來。
  3. 查詢語言,這是持久化操作中很重要的一個方面,通過面向對象而非面向數據庫的查詢語言查詢數據,避免程序的SQL語句緊密耦合。

二、JPA的主要API都定義在javax.persistence包中。與Hibernate對照如下:
————————————————–

三、實體生命周期

描述了實體對象從創建到受控、從刪除到游離的狀態變換。對實體的操作主要就是改變實體的狀態。

1.New,新創建的實體對象,沒有主鍵(identity)值
2.Managed,對象處于Persistence Context(持久化上下文)中,被EntityManager管理
3.Detached,對象已經游離到Persistence Context之外,進入Application Domain
4.Removed, 實體對象被刪除
EntityManager提供一系列的方法管理實體對象的生命周期,包括:
1.persist, 將新創建的或已刪除的實體轉變為Managed狀態,數據存入數據庫。
2.remove,刪除受控實體
3.merge,將游離實體轉變為Managed狀態,數據存入數據庫。
如果使用了事務管理,則事務的commit/rollback也會改變實體的狀態。

四、實體關系映射(ORM)

  • 基本映射

  • 2. ID生成策略
    ID對應數據庫表的主鍵,是保證唯一性的重要屬性。JPA提供了以下幾種ID生成策略
    (1) GeneratorType.AUTO ,由JPA自動生成
    (2) GenerationType.IDENTITY,使用數據庫的自增長字段,需要數據庫的支持(如SQL Server、MySQL、DB2、Derby等)
    (3) GenerationType.SEQUENCE,使用數據庫的序列號,需要數據庫的支持(如Oracle
    (4) GenerationType.TABLE,使用指定的數據庫表記錄ID的增長 需要定義一個TableGenerator,在@GeneratedValue中引用。例如:
    @TableGenerator( name=”myGenerator”, table=”GENERATORTABLE”, pkColumnName = “ENTITYNAME”, pkColumnValue=”MyEntity”, valueColumnName = “PKVALUE”, allocationSize=1 )

    @GeneratedValue(strategy = GenerationType.TABLE,generator=”myGenerator”)

  • 關聯關系
    JPA定義了one-to-one、one-to-many、many-to-one、many-to-many 4種關系。
    對于數據庫來說,通常在一個表中記錄對另一個表的外鍵關聯;對應到實體對象,持有關聯數據的一方稱為owning-side,另一方稱為inverse-side。
    為了編程的方便,我們經常會希望在inverse-side也能引用到owning-side的對象,此時就構建了雙向關聯關系。 在雙向關聯中,需要在inverse-side定義mappedBy屬性,以指明在owning-side是哪一個屬性持有的關聯數據。
    對關聯關系映射的要點如下:

    其中 many-to-many關系的owning-side可以使用@JoinTable聲明自定義關聯表,比如Book和Author之間的關聯表:
    @JoinTable(name = “BOOKAUTHOR”, joinColumns = { @JoinColumn(name = “BOOKID”, referencedColumnName = “id”) }, inverseJoinColumns = { @JoinColumn(name = “AUTHORID”, referencedColumnName = “id”) })
    關聯關系還可以定制延遲加載和級聯操作的行為(owning-side和inverse-side可以分別設置):
    通過設置fetch=FetchType.LAZY 或 fetch=FetchType.EAGER來決定關聯對象是延遲加載或立即加載。
    通過設置cascade={options}可以設置級聯操作的行為,其中options可以是以下組合:
    CascadeType.MERGE 級聯更新
    CascadeType.PERSIST 級聯保存
    CascadeType.REFRESH 級聯刷新
    CascadeType.REMOVE 級聯刪除
    CascadeType.ALL 級聯上述4種操作
  • 繼承關系
    JPA通過在父類增加@Inheritance(strategy=InheritanceType.xxx)來聲明繼承關系。A支持3種繼承策略:
    (1) 單表繼承(InheritanceType.SINGLETABLE),所有繼承樹上的類共用一張表,在父類指定(@DiscriminatorColumn)聲明并在每個類指定@DiscriminatorValue來區分類型。
    (2) 類表繼承(InheritanceType.JOINED),父子類共同的部分公用一張表,其余部分保存到各自的表,通過join進行關聯。
    (3) 具體表繼承(InheritanceType.TABLEPERCLASS),每個具體類映射到自己的表。
    其中1和2能夠支持多態,但是1需要允許字段為NULL,2需要多個JOIN關系;3最適合關系數據庫,對多態支持不好。具體應用時根據需要取舍。

  • 總結

    以上是生活随笔為你收集整理的java EE中JPA介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。