Hibernate之持久化對象

來源:互聯網
上載者:User

標籤:save   存在   .com   name   一級緩衝   圖書   nat   建立   date()   

 

時間:2017-1-19 23:00

 

——Hibernate持久化類的狀態

1、持久化類:就是一個實體類與資料庫建立了映射。

2、Hibernate為了方便管理持久化類,將持久化類分為了三種狀態:
    1)瞬時態:transient(臨時態)
    2)持久態:persistent
    3)脫管態:detached(離線態)


——三種持久化對象的狀態

1、三種持久化對象的狀態
    1)瞬時態
        不存在持久化標識OID,尚未與Hibernate Session關聯對象,被認為處於瞬時狀態,失去引用將被JVM回收。
        無持久化標識OID,未與Session關聯。

    2)持久態
        存在持久化標識OID,與當前Session有關聯,並且關聯的Session沒有關閉,事務未提交。
        存在持久化標識OID,與Session關聯。

        持久化對象有自動更新資料庫的能力。

    3)脫管態
        存在持久化OID,但沒有與當前Session關聯,脫管狀態改變時Hibernate無法檢測。
        存在持久化標識OID,未與Session關聯。

2、區分三種持久化對象的狀態

範例程式碼:

public class HibernateDemo1 {    @Test    /*     * 區分持久化對象的三種狀態:     */    public void fun1(){        // 1、建立Session        Session session = HibernateUtils.openSession();        // 2、開啟事務        Transaction tx = session.beginTransaction();         /*         * 3、邏輯操作         */
         // 向資料庫中儲存一本圖書        Book book = new Book(); // 瞬時態:沒有唯一標識OID,沒有與Session關聯         book.setName("Hibernate");        book.setAuthor("張三");        book.setPrice(50D);         session.save(book); // book變為一個持久態對象,有唯一標識OID,與Session關聯          // 4、提交事務        tx.commit();        // 5、施放資源        session.close();         book.setName("Struts2"); // 此時book就是脫管態了,有唯一標識OID,但與Session無關聯    }}


3、三種狀態物件的轉換

瞬時態:
    Book book = new Book();
    1)瞬時態 ——> 持久態
        Book book = new Book();
        session.save(book);

    2)瞬時態 ——> 脫管態
        book.setId(1); // 設定OID

持久態:
    Book book = (Book)session.get(Book.class, 1);
    get() / load() / find()  iterate()

    1)持久態 ——> 瞬時態
        session.delete(book); // 刪掉之後就沒有OID了

    2)持久態 ——> 脫管態
        session.close()
        clear() / evict(book) 將Session中的指定對象刪除。

脫管態:
    Book book = new Book();
    book.setId(1);

    1)脫管 ——> 持久
        session.update(book);

    2)脫管 ——> 瞬時
        book.setId(null);

——持久態對象自動更新資料庫

範例程式碼:

    /*     * 持久態對象自動更新資料庫     */    public void fun2(){        Session session = HibernateUtils.openSession();        Transaction tx = session.beginTransaction();         // 獲得一個持久態對象        Book book = (Book)session.load(Book.class, 1);         book.setName("Struts2");         tx.commit(); // 當提交時會發送一條update語句,自動更新資料庫資料,依賴的是Hibernate的一級緩衝        session.close();    }


——總結

1、Hibernate持久化對象的狀態:
    *   瞬時態
        沒有唯一標識OID,沒有與Session關聯
    *   持久態
        有唯一標識OID,與Session關聯
    *   脫管態
        有唯一標識OID,沒有與Session關聯

2、瞬時態對象
    User user = new User()
    瞬時態-->持久態
        session.save(user)
    瞬時態-->脫管態
        user.setId(1)

3、持久態對象
    get() / load()
    持久態-->瞬時態
        session.delete(Object)
    持久態-->脫管態
        session.close() / session.clear() / session.evice()

4、脫管態
    User user = new User();
    user.setId(1)
    脫管態-->瞬時態
        user.setId(null)
    脫管態-->持久態
        save() / saveOrUpdate()

Hibernate之持久化對象

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.