-
inverse屬性查看全部
-
set元素的常用屬性查看全部
-
基本配置查看全部
-
映射類型查看全部
-
在沒有設置級聯的時候,即沒有設置cascade屬性的時候,任何對表的操作都是可以的,但是就不會關聯另一表了.也沒有意義. 即當沒有設置級聯操作,刪除參照表的一條記錄,外鍵表沒有任何變化.當在參照表的映射文檔設置了cascade="all"級聯操作,同樣是刪除參照表的一條記錄,但外鍵表中與此被刪參照記錄相關聯的記錄也相應會被刪除(是整條記錄都被刪除,并不是指外鍵列的那個字段值被刪除).查看全部
-
cascade屬性 當設置了cascade屬性不為none時,Hibernate會自動持久化所關聯的對象. cascade屬性的設置會帶來性能上的變動,需謹慎設置. 在<set>標簽與<many-to-one>標簽中都有cascade屬性. 如果在<set>設置了cascade="save-update":則當"一方"的對象通過session.save()方法保存在數據庫中時,會自動進行級聯操作,即保存"一方"的對象進數據庫時也會把在"一方"對象中的Set集合中的"多方"對象保存進數據庫.因此就可以省寫session.save("多方的對象"). 也可以在<many-to-one>中添加cascade="save-update"屬性,即當保存"多方"的對象進數據庫時,如果數據庫不存在此"多方"對象中的"一方"對象,那么會進行級聯操作,會把此"一方"對象添加到數據庫中. cascade可取: all:所有情況下均進行關聯操作,即save-update和delete. none:所有情況下均不進行關聯操作,這是默認值. save-update:在執行save/update/saveOrUpdate時進行關聯操作. delete:在執行delete 時進行關聯操作. all-delete-orphan:當一個節點在對象圖中成為孤兒節點時,刪除該節點.查看全部
-
雙向的關聯關系中.Hibernate會產生沒必要的更新維護語句,因為兩邊映射關系都對外鍵列進行更新維護了,但其實只有一方映射更新維護一次就可以了,另一邊的映射關系不必要再更新一次. 可以通過inverse屬性來控制. <set>節點的inverse屬性指定關聯的控制方向.如果雙方都來維護,則會對性能上有影響. 關聯關系中,inverse="false"(默認),則為主動方,由主動方負責維護關聯關系.主動方意思就是如果先把"多方"對象保存在"一方"的Set集合中,那么"一方"就是主動方,"多方"為后動方. 如果先把"一方"的對象保存在"多方"的成員變量中.那個"多方"就是主動方,"一方"為后動方. 后動方總是會更新維護的,因此通常把inverse設置為true,僅讓后動方進行維護即可.查看全部
-
set元素的常用屬性 name:參照類中Set類型的成員名稱. table:外鍵類所對應的數據表名.查看全部
-
單向的一對多:"一方"實體類中添加泛型為"多方"類類型的set集合,并在"一方"的映射文檔中設置<set>標簽,其下添加<one-to-many>標簽. 單向的多對一:通過"多方"的實體類中持有"一方"的引用實現,并在"多方"的映射文件的<class>標簽下添加<many-to-one>標簽. 雙向的一對多和雙向的多對一是一樣的:同時滿足單向的一對多與單向的多對一即可. 因此<many-to-one>標簽不會寫在<set>標簽下,是直接寫在<class>標簽下. 而<one-to-many>標簽需要在<set>標簽下使用. 一般"一方"都是參照列,"多方"都是外鍵列. 單向的多對一: 在"多方"的實體類中,需要有一個"一方"類類型的成員變量,并且把"一方"的對象添加到此成員變量中.并在映射文檔中加上<many-to-one>標簽.查看全部
-
當要更新學生所對應的班級信息. 只需先獲取新的班級對象,再獲取學生對象,把學生對象添加到新的班級對象的set集合中,最后用session.update()更新班級信息即可. Grade grade=(Grade)session.get(Grade.class,2); Student stu=(Student)session.get(Student.class,5); grade.getSet().add(stu); session.update(grade); 要刪除學生信息則先獲取學生信息對象,再用session.delete(obj)直接刪除即可,不需要將此對象所對應的班級對象中的set集合中刪除.查看全部
-
因為設置了班級-->學生的映射,因此可以通過獲取班級信息中的Set集合來獲取到此班級包含的學生信息. 如果同時也設置了學生-->班級的映射(<many-to-one>),即雙向映射,則可以通過獲取學生對象中所對應的班級對象來獲取班級信息. 建立了關聯以后,可以方便的從一個對象導航到另外一個對象. 注意關聯的方向,如果是雙向的則可以從班級信息中獲取到此班級的學生信息,也可以從學生信息中獲取到此學生的班級信息. 圖中是單向(班級-->學生).查看全部
-
單向的一對多關聯,即只在"一方"的映射文檔中存在<one-to-many>標簽.雙向的一對多關聯,即在"一方"存在<one-to-many>標簽,"多方"存在<many-to-one>標簽,且在多方的實體類中,存在一個"一方"類類型的成員變量.<many-to-one>是多對一的關聯. <many-to-one>常用屬性: name:表示屬性名. column(可選):外鍵的字段名.它也可以通過嵌套的 <column>元素指定. class(可選):關聯的類的名字.(即參照列的類名,即name屬性所對應的類) cascade(級聯),(可選):指明哪些操作會從父對象級聯到關聯的對象. unique(可選):使用DDL為外鍵字段生成一個唯一約束.此外,這也可以用作property-ref的目標屬性.這使關聯同時具有一對一的效果. not-null(可選):使用DDL為外鍵字段生成一個非空約束.查看全部
-
設置了關聯,則要在hbm.xml映射文檔中進行配置. 兩個表之間有關聯,在數據庫中一般都會設置主外鍵.在Hibernate技術中則用面向對象的思想設置. 一對多關聯(在"一方"的映射文檔配置) <class>標簽下要添加一個<set>標簽,其中set標簽有name、table屬性.name代表在"一方"實體類中集合Set屬性的名字,table代表此Set屬性存放的內容是屬于哪一張表的. 在<set>標簽下還有<key>子標簽,其column屬性來指定關聯的外鍵列名. <set>標簽下還有<one-to-many></one>單標簽,存在class屬性,來指明關聯的"多方"的類名. <set name="set" table="Student"> <!-- 指定關聯的外鍵列 --> <key column="cid"></key> <one-to-many class="com.zht.Student"></one> </set> 在hibernate設置關聯時,外鍵表實體類中不需要額外設置外鍵列的成員變量.因為在參照表的映射文檔中設置了<key>標簽的column屬性指定外鍵列.外鍵列的名字可以自定義.且外鍵列默認與參照表的<id>標簽即主鍵的字段相關聯. 在hibernate.cfg.xml文檔的<mapping resource="">的resource屬性,填寫的是物理路徑,要加/ session.save()方法中,session會去映射文檔中尋找與參數中的對象相對應的映射類,匹配之后就會把對象保存在對應的表中. 要先保存參照列再保存外鍵列.查看全部
-
不同的Hibernate版本,獲取會話的方式也不一樣.在Hibernate3和Hibernate4獲取會話的方式不同. 可以建立一個工具類,專門用來獲取sessionFactory、session等. public Class HiberUtil { private static SessionFactory sessionFactory; private static Session session; static{ //靜態語句塊內加載 Configuration config = new Configuration().configure(); ServiceRegistryBuilder srb = new ServiceRegistryBuilder().applySettings(config.getProperties()); ServiceRegistry sr = srb.buildServiceRegistry(); sessionFactory = config.buildSessionFactory(sr); //創建得到會話工廠 } public static SessionFactory getSessionFactory(){ return sessionFactory; } public static Session getSession(){ session=sessionFactory.openSession(); return session; } }查看全部
-
一般在配置文檔的<property name="connection.url">中設置字符集,為了防止亂碼. <property name="connection.url"> jdbc:mysql://localhost:3306/imooc?useUnicode=true&&characterEncoding=utf8 </property>查看全部
舉報
0/150
提交
取消