• Hibernate Session方法小結

    1
    Hibernate 數據庫 XML C/C++ 12049 次瀏覽
    hibernate session中的load方法返回的一個POJO的代理對象,只有在訪問其field時才進行實際的數據裝載(向數據庫發出一條select查詢),如 果該通過getter方法來訪問其field值,但是session已經close,將拋出延遲初始化的異常。如果load加載的是一條不存在的數據,在 該entity的field訪問時,將拋出ObjectNotFoundException的異常。
    對于session中的get方法,將會實時返回一個實際的POJO對象,而不是load中返回的代理對象。調用get時將立即發出select查詢。對于不存在的數據記錄,get將返回一個null值,在調用其方法時將產生NullPointerException。

    hibernate session中的update方法用來更新對應的pojo對象到數據庫中。update方法可以更新一個detached對象,前提條件是該 detached對象必須包含id值,并且該update會更新該pojo對象中所有的值到數據庫中(根據hbm文件中的配置)。update方法同時也 可以更新一個persistence對象到數據庫中,如果pojo對象已經是persistence對象(也就是已經存在于session的cache 中),進行更新操作只需設置為對應的field值,甚至不需要調用update方法,在session關閉時會自動同步到數據庫中。
    hibernate中對于merge操作同樣能達到持久化的目的,那么他和update方法有什么區別呢?merge方法在進行更新操作時,會首 先判斷該pojo對象是否是一個persistence對象,如果不是,那么他會首先根據id發出一條select查詢,并將查詢出的新對象加入到 session的cache中,納入session的生命周期管理中,然后再根據變化進行update。

    對于update一個detached對象將導致的全盤update,就是所有在xml配置中的列都將進行update。可以通過在xml的 class元素上設置dynamic-update屬性和merge方法來避免所有列的update。merge由于merge方法將自動發出一條 select查詢來將detached對象納入session的管理,所有對于大批量的操作可能將產生性能問題。建議使用update query來進行部分列的更新。這種特性在hibernate 3.3中才被加入到hibernate中。

    來自:http://thinkdifferent.iteye.com/blog/1236482

    相似問題

    相關經驗

    相關資訊

    相關文檔

  • sesese色