-
cascade屬性: 1、當(dāng)設(shè)置了cascade屬性不為none時(shí),Hibernate會(huì)自動(dòng)持久化所關(guān)聯(lián)的對象; 2、cascade屬性的設(shè)置會(huì)帶來性能上的變動(dòng),需要謹(jǐn)慎設(shè)置; ———————————————————————————— 屬性值 含義和作用 all 對所有操作進(jìn)行級(jí)聯(lián)操作 save-update 執(zhí)行保存和更新操作時(shí)進(jìn)行級(jí)聯(lián)操作 delete 執(zhí)行刪除時(shí)進(jìn)行級(jí)聯(lián)操作 none 對所有操作不進(jìn)行級(jí)聯(lián)操作 ———————————————— 說明: 1.在向Grade添加Student后,保存Grade對象時(shí),能不能不需要顯示的保存Student對象,答案是可以的,可以使用級(jí)聯(lián)操作:在Grade的映射文件中的<set>節(jié)點(diǎn)添加cascade屬性不為none,為"save-update"; 2.在向Student添加Grade后,保存Student對象時(shí),能不能不需要顯示的保存Grade對象,答案是可以的,可以使用級(jí)聯(lián)操作:在Student的映射文件中的<many-to-one>節(jié)點(diǎn)添加cascade屬性不為none,為"save-update".查看全部
-
配置雙向的關(guān)聯(lián)關(guān)系: 1、分別在持久化類中定義另一方的引用; 一方:private Set<Student>students=new HashSet<Student>();并setter、getter 多方:private Grade grade;并setter、getter; 2、在一方映射文件配置一對多屬性集合與在多方配置多對一關(guān)聯(lián)關(guān)系 //在一方配置關(guān)聯(lián)關(guān)系 <set name="一方實(shí)體類定義的多方的引用,即多方屬性Students" table="多方的表名"> <key column="關(guān)聯(lián)外鍵的列g(shù)id"></key> <one-to-many class="多方實(shí)體類的全類名com.imooc.entity.Student" ></one> </set> //在多方配置關(guān)聯(lián)關(guān)系 <many-to-one name="指定對應(yīng)的屬性的名稱" class="對應(yīng)實(shí)體類的全類名com.imooc.entity.Grade" column="指定外鍵的列名gid" > </many-to-one> //測試方法 public static void save(){ Grade g=new Grade("Java一班", "Java軟件開發(fā)一班"); Student s1=new Student("小米", "女"); Student s2=new Student("小明","男"); //創(chuàng)建多對一的配置 g.getStu().add(s1); g.getStu().add(s2); s1.setGrade(g); s2.setGrade(g); Session session=HibernateUtil.getSession(); Transaction transaction=session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); transaction.commit(); HibernateUtil.closeSession(session); }查看全部
-
單向多對一關(guān)聯(lián): 1.多對一的關(guān)系和關(guān)系數(shù)據(jù)庫中的外鍵參照關(guān)系最匹配,即在己方的表中的一個(gè)外鍵參照另一個(gè)表的主鍵 2.通過在多方持有一方的引用實(shí)現(xiàn),需要在“多”的一端使用<many-to-one>配置 // 在一對多的一方,定義一個(gè)集合表示多方 private Set<Students> students = new HashSet<Students>(); <set name="students" table="STUDENTS" inverse="false" lazy="true"> <key> <column name="GID" /> </key> <one-to-many class="com.Students" /> </set>查看全部
-
在"一"保存"多"的集合創(chuàng)建一對多關(guān)系: 1.在插入"一"的數(shù)據(jù)時(shí),首先將"一"的元素(除了建立一對多關(guān)系的集合)添加到對應(yīng)表項(xiàng),然后根據(jù)集合元素到"多"對應(yīng)的表中更新"多"的參照數(shù)據(jù)(集合只用于更新"多"的數(shù)據(jù),而不會(huì)作為"一"的數(shù)據(jù)保存) 2.可以直接(不用二次查表)通過"一"得到相應(yīng)的"多",反之不行(導(dǎo)航查詢要注意方向:一到多)查看全部
-
什么是一對多的關(guān)系呢? 就像班級(jí)和學(xué)生。站在班級(jí)的角度看。班級(jí)和學(xué)生就是一對多的關(guān)系。單向的 那怎么樣實(shí)現(xiàn)這種關(guān)系呢? 1.在數(shù)據(jù)庫中,可以通過添加主外鍵的關(guān)聯(lián),表現(xiàn)一對多的關(guān)系; 2.在java中,通過在一方持有多方的集合實(shí)現(xiàn),即在“一”的一端中使用<set>元素表示持有“多”的一端的對象。查看全部
-
Hibernate的映射類型: 一對多 (one-to-many) 多對一 (many-to-one) 一對一 (one-to-one) 多對多 (many-to-many)查看全部
-
添加外鍵查看全部
-
soputasmile 感覺老師講的inverse的理解有問題,inverse表示是否將控制權(quán)交給對方,為true表示交給對方,自己變成被空方。在一對多中,在一方設(shè)置inverse為true的話,g.add(stu),session.save(g),設(shè)置級(jí)聯(lián)為save-update,在數(shù)據(jù)庫中學(xué)生的外鍵其實(shí)為空,也就是說,其實(shí)在一方設(shè)置inverse為true,實(shí)際上是表示由多方維護(hù)關(guān)系,而g.add(stu)是多方在執(zhí)行,所以沒有維護(hù) 時(shí)間: 2017-03-22 4查看全部
-
java數(shù)據(jù)類型對應(yīng)的hibernate數(shù)據(jù)類型:查看全部
-
實(shí)現(xiàn)為項(xiàng)目添加Hibernate支持 右擊項(xiàng)目-->MyEclipse-->Add Hibernaet Capabilities-->選擇hibernate版本(越高越好)-->...-->選擇數(shù)據(jù)庫連接-->.. 它能生成XXX.cfg.xml 文件還能生成HibernateSessionFactory工具類簡化我們的操作查看全部
-
MyEclipse 給工程添加hibernate支持 菜單Windws-->Show-->View-->Other,展開MyEclipse Datebase 選擇DB Browser(數(shù)據(jù)庫視圖) 左側(cè)空白右擊,New-->DatebaseDriver 選擇相應(yīng)數(shù)據(jù)庫 給連接命名,指定DB URl-->user /password--> Driver JARs :點(diǎn)擊Add JARS 選擇JAR包 可點(diǎn)擊Test Driver 可勾選save password查看全部
-
cascade(級(jí)聯(lián))屬性查看全部
-
inverse屬性的用法查看全部
-
雙向一對多映射的建立: 以一對多,多對一的方式配置兩個(gè)持久化類的hbm.xml,然后用代碼相互添加對方的引用,就行了。 不過這樣,一對多的hbm.xml會(huì)多執(zhí)行一次維護(hù)雙方關(guān)系的sql語句,即班級(jí)再次設(shè)置學(xué)生的gid。這樣會(huì)影響性能。提高性能的方法要用到inverse屬性。查看全部
-
單向多對一關(guān)系: 測試代碼。 *在一對多關(guān)系中,在一方建立多方的集合。然后將多方添加進(jìn)集合,進(jìn)行保存。 *在多對一關(guān)系中,在多方建立一方的引用。然后對一方的引用賦值,進(jìn)行保存。 //單向多對一之添加學(xué)生信息 public static void save(){ Grade g=new Grade("Java一班", "Java軟件開發(fā)一班"); Student s1=new Student("小米", "女"); Student s2=new Student("小明","男"); //創(chuàng)建多對一的配置 s1.setGrade(g); s2.setGrade(g); Session session=HibernateUtil.getSession(); Transaction transaction=session.beginTransaction(); session.save(g); session.save(s1); session.save(s2); transaction.commit(); HibernateUtil.closeSession(session); }查看全部
舉報(bào)
0/150
提交
取消