熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java開源技術 >> 正文

Hibernate基礎詳細分析

2013-11-23 20:29:44  來源: Java開源技術 

  Hibernate還是比較常用的於是我研究了一下Hibernate基礎在這裡拿出來和大家分享一下希望對大家有用

  Hibernate基礎——刪除實體

  Session接口提供了一個delete()方法:


   Public void delete(Object object) throws HibernateException 

  這個方法以一個持久對象作為參數參數也可以是一個具有標識符的瞬時對象這個標識符設置為要刪除的對象的id 使用delete()方法時也可以使用級聯

  Hibernate還支持大批量刪除應用程序對數據庫執行一個DELETE HQL語句


   sessioncreatQuery(delete from user)executeUpdate(); 

  這非常適合同時刪除多個對象因為不需要僅為了刪除對象而將每個對象加進內存用這種方法不會導致級聯操作

  Hibernate基礎——級聯

  在默認情況下Hibernate不進行任何級聯操作在配置中級聯的值可以用逗號分隔如: cascade=alldeleteorphan
◆all :  所有情況下均進行關聯操作
◆none 所有情況下均不進行關聯操作這是默認值
◆saveupdate: 在執行save/update/saveOrUpdate時進行關聯操作
◆delete 在執行delete時進行關聯操作

  all的意思是saveupdate + delete

  還有一種級聯類型是deleteorphan 如果使用deleteorphan那麼從父對象的集合中刪除子對象時就從數據庫中刪除子對象這種級聯類型只適用於一對多關聯all級聯類型不包含deleteorphan必須使用all deleteorphan

  在添加deleteorphan級聯類型後只需從父對象的集合中刪除子對象Hibernate會自動地從數據庫中刪除子對象不需要執行其他調用下面的示例是從集合中刪除一個子對象:


   SuppliergetProducts()remove(product); 

  Hibernate基礎——延遲加載

  在使用XML映射時默認啟用延遲加載但是在使用注解時默認不啟用在Hibernate默認情況下類(包括Set和Map等集合)應該延遲加載如果使用延遲加載一個實體的關聯實體只在它們被直接請求時加載

  Hibernate只能通過會話訪問數據庫如果試圖訪問還沒有加載的關聯但是實體是分離的那麼Hibernate會拋出一個異常:LazyInitializationException

  解決方法:
◆讓實體再次進入持久狀態
◆在實體脫離會話之前訪問所需的所有字段 

  Hibernate基礎——查詢對象
◆Criteria Query API是一個Java  API
◆HQL是一種面向對象的查詢語言

  Hibernate基礎——主鍵

  如果表已經創建了但是沒有主鍵Hibernate就要求指定一個主鍵但是在使用Hibernate時應該盡可能使用指定了主鍵的表

  Hibernate類型

  Hibernate類型分為三大類型:實體組件實體: 是一個使用<class>或<subclass>元素映射到數據庫的POJO類也可以用Map表示dynamicmap還可以用DomJ Document對象表示


From:http://tw.wingwit.com/Article/program/Java/ky/201311/28574.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.