標籤:man collect 插入 ring 關閉 有助於 false 編寫 多對多
映射的POJO類型中如果有基本類型最好都是用封裝類來代替;
注意關聯關係的正確設定,一對一(主鍵方式、外鍵外鍵方式),一對多和多對多的配置,單向、雙向的配置;
更新核心設定檔的mapping:如果是在hibernate.cfg.xml中以匯入對應檔的方式配置的話,注意在增加了新的domain類之後要將新的映射設定檔加入進去;
注意hibernate管理的對象的狀態:是瞬時態還是託管態?有時候事務結束了之後還去讀代理對象的值,這個時候設定了消極式載入的話會報錯的;
注意在一對多主鍵級聯操作的時候外鍵為NOT NULL可能會引發違例操作,這就和hibernate執行sql語句有關了;
在一對多關聯中,常把多的一方作為主動關聯方,由它去維護關聯關係;也就是將many的一方inverse=false,而且這樣也有助於改善效能;維護關聯關係體現在將對方的引用設定到自己的屬性當中;
盡量少用多對多關聯(可以用多個一對多關聯來來代替多對多關聯);
多對多注意設定消極式載入,避免無謂的效能開銷;
多對多關係中由於關聯關係是兩張表相互引用,因此在儲存關聯狀態時必須雙方同時儲存,體現在二者互相設定對方的引用;
一對多關聯性的維護可以是雙方都維護,也可以是由一方維護,但是多對多中僅且僅有一方維護關係(也就是inverse的設定);
在一個session中對同一個id最多只能有一個與之對應的瞬時態對象;
在修改或這個刪除的時候最好都是先查出要修改的對象,再進行操作,這樣可以避免原來的關聯關係;
通過引用查詢可以不在代碼中出現HQL/SQL語句;
對Action中對託管態對象的修改由於事務已經關閉而不會同步到資料庫中;
避免查詢時的SQL語句的N+1問題;
在需要的時候可以將消極式載入設定為false,在class標籤中,這樣在Session關了之後依然可以使用關聯對象;
在編寫POJO的時候,必須使用JDK的介面,而不應該使用JDK Collection的實作類別,因為Hibernate返回的Set是Hibernate對Set介面的特定實現,因而會造成強轉錯誤;
屬性的消極式載入可以在<property>標籤中設定,但是要對類進行加強;
Hibernate的內部緩衝機制可能造成進行大量插入操作的時候OutOfMemory:可以每隔一段時間清空一次緩衝;二是可以在核心設定檔的<session-factory>標籤中加入<property name="hibernate.jdbc.batch_size">25</property>來進行批量插入;
hibernate中分頁操作的實現;
hibenate的長對話session實現在web項目可以用Spring提供的OpenSessoinInView實現;
有問題歡迎相互探討!
Hibernate使用注意事項