国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

Hibernate4.x之映射關(guān)系--多對(duì)多

2019-11-14 22:04:22
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
Hibernate4.x之映射關(guān)系--多對(duì)多

n-n的關(guān)聯(lián)關(guān)系分為以下兩類:

1.單向n-n關(guān)聯(lián)關(guān)系:

  • n-n的關(guān)聯(lián)必須使用連接表
  • 與1-n映射類似,必須為set集合元素添加key子元素,指定CATEGORIES_ITEMS表中參照CATEGORIES表的外鍵為CATEGORIY_ID。與1-n關(guān)聯(lián)映射不同的是,建立n-n關(guān)聯(lián)時(shí),集合中的元素使用many-to-many。many-to-many子元素的class屬性指定items接種存放的是Item對(duì)象,column屬性指定CATEGORIES_ITEMS表中參照ITEMS表的外鍵為ITEM_ID

  

--------------------------------代碼--------------------------------------------------------

Category.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-29 21:45:04 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping package="com.yl.hibernate.n2n"> 6     <class name="Category" table="CATEGORYS"> 7         <id name="id" type="java.lang.Integer"> 8             <column name="ID" /> 9             <generator class="native" />10         </id>11         <PRoperty name="name" type="java.lang.String">12             <column name="NAME" />13         </property>14         <!-- table:指定中間表 -->15         <set name="items" table="CATEGORIRIES_ITEMS" inverse="false" lazy="true">16             <key>17                 <column name="C_ID" />18             </key>19             <!-- 使用many-to-many 指定多對(duì)多的關(guān)聯(lián)關(guān)系, column指定set集合中的持久化類在中間表的外鍵列的名稱 -->20             <many-to-many class="Item" column="I_ID"/>21         </set>22     </class>23 </hibernate-mapping>

Item.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-29 21:45:04 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping> 6     <class name="com.yl.hibernate.n2n.Item" table="ITEMs"> 7         <id name="id" type="java.lang.Integer"> 8             <column name="ID" /> 9             <generator class="native" />10         </id>11         <property name="name" type="java.lang.String">12             <column name="NAME" />13         </property>14     </class>15 </hibernate-mapping>

2.雙向n-n關(guān)聯(lián)關(guān)系

  • 雙向n-n關(guān)聯(lián)需要兩端都使用集合屬性
  • 雙向n-n關(guān)聯(lián)必須使用連接表
  • 集合屬性應(yīng)增加key子元素用以映射外鍵列,集合元素里還應(yīng)增加many-to-many子元素關(guān)聯(lián)實(shí)體類
  • 在雙向n-n關(guān)聯(lián)的兩邊都需指定連接表的表名及外鍵列的列名。兩個(gè)集合元素set的table元素的值必須指定,且必須相同。set元素的兩個(gè)子元素:key和many-to-many多必須指定column屬性,其中,key和many-to-many分別制定本持久化類和關(guān)聯(lián)類在連接表中的外鍵列名,因此兩邊的key與many-to-many的column屬性交叉相同。也就是說,一邊的set元素的key的column值為a,many-to-many的column為b,則另一邊的set元素的key的column值為b,many-to-many的column值為a
  • 對(duì)于雙向n-n關(guān)聯(lián),必須把其中一端的inverse設(shè)置為true,否則兩端都維護(hù)關(guān)聯(lián)關(guān)系可能會(huì)造成逐漸沖突

Category.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-29 21:45:04 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping package="com.yl.hibernate.n2n"> 6     <class name="Category" table="CATEGORYS"> 7         <id name="id" type="java.lang.Integer"> 8             <column name="ID" /> 9             <generator class="native" />10         </id>11         <property name="name" type="java.lang.String">12             <column name="NAME" />13         </property>14         <!-- table:指定中間表 -->15         <set name="items" table="CATEGORIRIES_ITEMS" inverse="false" lazy="true">16             <key>17                 <column name="C_ID" />18             </key>19             <!-- 使用many-to-many 指定多對(duì)多的關(guān)聯(lián)關(guān)系, column指定set集合中的持久化類在中間表的外鍵列的名稱 -->20             <many-to-many class="Item" column="I_ID"/>21         </set>22     </class>23 </hibernate-mapping>

Item.hbm.xml

 1 <?xml version="1.0"?> 2 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 3 "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 4 <!-- Generated 2014-11-29 21:45:04 by Hibernate Tools 3.4.0.CR1 --> 5 <hibernate-mapping> 6     <class name="com.yl.hibernate.n2n.Item" table="ITEMs"> 7         <id name="id" type="java.lang.Integer"> 8             <column name="ID" /> 9             <generator class="native" />10         </id>11         <property name="name" type="java.lang.String">12             <column name="NAME" />13         </property>14         15         <set name="categories" table="CATEGORIRIES_ITEMS" inverse="true">16             <key><column name="I_ID"></column></key>17             <many-to-many class="com.yl.hibernate.n2n.Category" column="C_ID"></many-to-many>18         </set>19         20     </class>21 </hibernate-mapping>

測(cè)試類:

 1 package com.yl.hibernate.n2n; 2  3  4 import java.util.Set; 5  6 import org.hibernate.session; 7 import org.hibernate.SessionFactory; 8 import org.hibernate.Transaction; 9 import org.hibernate.cfg.Configuration;10 import org.hibernate.service.ServiceRegistry;11 import org.hibernate.service.ServiceRegistryBuilder;12 import org.junit.After;13 import org.junit.Before;14 import org.junit.Test;15 16 public class HibernateTest {17 18     private SessionFactory sessionFactory;19     private Session session;20     private Transaction transaction;21     22     @Before23     public void init() {24         Configuration configuration = new Configuration().configure();25         ServiceRegistry serviceRegistry = 26                 new ServiceRegistryBuilder().applySettings(configuration.getProperties())27                                             .buildServiceRegistry();28 29         sessionFactory = configuration.buildSessionFactory(serviceRegistry);30         31         session = sessionFactory.openSession();32 33         transaction = session.beginTransaction();34     }35     @After36     public void destory() {37         transaction.commit();38         39         session.close();40         41         sessionFactory.close();42     }43     44     @Test45     public void testSave() {46         Category category1 = new Category();47         category1.setName("C-AA");48         49         Category category2 = new Category();50         category2.setName("C-BB");51         52         53         Item item1 = new Item();54         item1.setName("I-AA");55         56         Item item2 = new Item();57         item2.setName("I-BB");58         59         //設(shè)定關(guān)聯(lián)關(guān)系60         category1.getItems().add(item1);61         category1.getItems().add(item2);62         63         category2.getItems().add(item1);64         category2.getItems().add(item2);65         66         item1.getCategories().add(category1);67         item1.getCategories().add(category2);68         69         item2.getCategories().add(category1);70         item2.getCategories().add(category2);71         72         //執(zhí)行保存操作73         session.save(category1);74         session.save(category2);75         76         session.save(item1);77         session.save(item2);78     }79     80 81     @Test82     public void testGet() {83         Category category = (Category) session.get(Category.class, 1);84         System.out.println(category.getName());85         //需要連接中間表86         Set<Item> items = category.getItems();87         System.out.println(items.size());88         89     }90         91 }

  


發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 富民县| 侯马市| 北川| 陵水| 乳山市| 三原县| 宝山区| 津市市| 调兵山市| 自治县| 台北县| 遵化市| 开阳县| 收藏| 吴堡县| 沐川县| 杭锦旗| 通河县| 东城区| 措美县| 安福县| 中西区| 南乐县| 乌拉特中旗| 土默特左旗| 巴彦淖尔市| 徐水县| 赤水市| 滁州市| 栖霞市| 佛坪县| 和林格尔县| 青田县| 肥城市| 巴塘县| 察雅县| 钟祥市| 东乌| 乐业县| 突泉县| 沙洋县|