Hibernate ORM框架——綜合
阿新 • • 發佈:2017-08-18
連接數 org 延遲 導入 配置 enc 兩張 應用程序 鍵值
換一個連接數據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框架——綜合