標籤:計算 懶載入 *** 串連 inverse set property update 匯入
換一個串連資料mySql資料庫的項目:HibernateStudy_cascade_inverse_query**********1.支援sql server需要的設定******************************************************* a):驅動jar的處理-->匯入sqljdbc42.jar串連資料庫驅動 b):修改hibernate.cfg.xml中配置相關的串連,方言 <property name="connection.driver_class">com.microsoft.sqlserver.jdbc.SQLServerDriver</property> <property name="connection.url">jdbc:sqlserver://localhost:1433;databaseName=demo</property> <property name="connection.username">sa</property> <property name="connection.password"></property> <property name="dialect">org.hibernate.dialect.SQLServer2008Dialect</property> c):開啟TCP/IP的支援-->電腦管理,服務和應用程式,SQL Server組態管理員,SQL Native Cloient 10.0配置,用戶端協議 d):啟動sql server的服務 **********2.關聯資料的處理****************************************************************關聯資料的插入,更新(修改),刪除的順序 假定A是主表,B是子表 create table A ( aid varchar2(255 char) not null, primary key(aid) ) create table B ( bid varchar2(255 char) not null, primary key(bid), raid foreign key(aid) references A //外鍵 )在MySQL資料庫層面*************************************** a)insert(添加操作) : 先主表,後從(子)表 b)update(更新)(我們一般是不更新表的主鍵) 在資料庫層面來看,如果不考慮更新主鍵,順序是無關緊要的。 c)delete(刪除) 先刪從表(子表)的,然後再刪主表在hibernate代碼層面*************************************關聯資料如果MySQL的代碼和自己預想中的有出入,如何處理,需考慮的點。 1.考慮調用session對象的save,update,delete的順序問題 2.考慮在代碼層面有沒有設定關係,外鍵是否允許為null 3.考慮對象此時的狀態 協助判斷工具:sql server的監聽器**********3.cascade(級聯)************************************************************* **********4.inverse(確定關係維護方)******************************************************關係維護,本質就是誰負責處理外鍵列的值。inserse 一般是出現的對應檔的set元素裡面因為出現在set裡面,也就是出現主表的對應檔中如果把inserse設定為true,就表示由對方,也就是子表來維護關係(就不會繼續進行修改操作,而此時查表時的外索引值也為空白),主的一方不管。-->在添加子表的時候,相關聯的主表就跟著添加了一般預設inserse的值為true,即為自己就是維護關係方,會進行修改(更新)操作所以一般來說永遠交給子表來維護關係,是比較合理的(比如:一個應屆生,他並不屬於任何部門,那麼在這個應屆生中存在兩張表,一張是個人的資訊表,一張是部門表。在個人資訊表中的所屬部門可以為空白,等到該應屆生,正式成為某某部門的時候,才不為空白。也同時說明,外鍵一般時可以為空白的)**********5.關聯資料的查詢形式(檢索策略)****************************************************關聯資料的載入,有3種情況1.延遲(lazy)也叫作懶載入: 當只在尋找班級資料後,馬上調用session.close();那麼久預設為延遲(lazy)載入。即後面還沒有尋找完的語句就不尋找了 預設:lazy="true" 2.勤載入(eager) 當只在尋找班級資料後,馬上調用session.close();而後面還沒有尋找完的語句就系統仍然自動尋找,稱為勤載入(eager) lazy="false"如在學生這邊加,在查詢學生資訊的同時也查詢班級資訊是正常的 3.外鍵載入(明確式載入): outer-join="true":查詢的SQL語句中只用左外串連顯示出一條查詢結果 避免普通查詢,兩張表,則需要發送兩條select語句。
/*以上個人整理筆記,如果有誤或者有不懂的地方,歡迎評論與指出*/
Hibernate ORM架構——綜合