迷失北京

          BlogJava 聯(lián)系 聚合 管理
            60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

               這里舉了皇帝和大臣的例子,天子只有一個(gè),而諸侯多的不勝計(jì)數(shù)。

          實(shí)體:

          package uni.one2many;
          
          import java.util.HashSet;
          import java.util.Set;
          
          public class Emperor {
          	private int id;
          	private String name;
          	private Set<Minister> ministers = new HashSet<Minister>();
          
          	public Emperor() {
          
          	}
          
          	public Emperor(int id, String name, Set<Minister> ministers) {
          		super();
          		this.id = id;
          		this.name = name;
          		this.ministers = ministers;
          	}
          
          	public int getId() {
          		return id;
          	}
          
          	public void setId(int id) {
          		this.id = id;
          	}
          
          	public String getName() {
          		return name;
          	}
          
          	public void setName(String name) {
          		this.name = name;
          	}
          
          	public Set<Minister> getMinisters() {
          		return ministers;
          	}
          
          	public void setMinisters(Set<Minister> ministers) {
          		this.ministers = ministers;
          	}
          
          }
          
          package uni.one2many;
          
          public class Minister {
          	private int id;
          	private String name;
          
          	public Minister() {
          
          	}
          
          	public Minister(int id, String name) {
          		super();
          		this.id = id;
          		this.name = name;
          	}
          
          	public int getId() {
          		return id;
          	}
          
          	public void setId(int id) {
          		this.id = id;
          	}
          
          	public String getName() {
          		return name;
          	}
          
          	public void setName(String name) {
          		this.name = name;
          	}
          
          }
          

            

          hbm配置文件:

          <hibernate-mapping>
          	<class name="uni.one2many.Emperor">
          		<id name="id" column="did">
          			<generator class="native" />
          		</id>
          		<property name="name" type="string" column="name"></property>
          		
          		<!-- confirure the uniredirection association -->
          		<set name="ministers" >
          			<key column="id" not-null="true"></key>
          			<one-to-many class="uni.one2many.Minister"/>
          		</set>
          	</class>
          
          </hibernate-mapping>
          <hibernate-mapping>
          	<class name="uni.one2many.Minister">
          		<id name="id" column="did">
          			<generator class="native" />
          		</id>
          		<property name="name" type="string" column="name"></property>
          	</class>
          
          </hibernate-mapping>
          

            

          測(cè)試文件:

          public class Test {
          	
          	@org.junit.Test
          	public void testAdd() {
          		SessionFactory sf = HibernateUtil.getSessionFactory();
          		Session session = sf.getCurrentSession();
          		session.beginTransaction();
          		
          		Minister m1 = new Minister();
          		m1.setName("廉頗");
          		
          		Minister m2 = new Minister();
          		m2.setName("藺相如");
          		
          		Emperor emperor = new Emperor();
          		emperor.setName("齊威王");
          		emperor.getMinisters().add(m1);
          		emperor.getMinisters().add(m2);
          		
          		session.save(emperor);
          		session.save(m1);
          		session.save(m2);
          		session.beginTransaction().commit();
          	}
          }
          

            

          測(cè)試結(jié)果:

          ibernate: insert into Emperor (name) values (?)
          Hibernate: insert into Minister (name, id) values (?, ?)
          Hibernate: insert into Minister (name, id) values (?, ?)
          Hibernate: update Minister set id=? where did=?
          Hibernate: update Minister set id=? where did=?
          

            

          這種映射關(guān)系在保存的過程中需要先將一的(主控方)一方先加以保存,否則會(huì)出現(xiàn)異常。我們可以對(duì)這種異常加以分析,從這種關(guān)系生成的表結(jié)構(gòu)可以看出,在Minister的表中有一個(gè)指向Emperor的外鍵,由此可以推測(cè)出,如果這個(gè)外鍵有了非空約束,那么再存儲(chǔ)Minister的過程中必然會(huì)出現(xiàn)引用為空的異常。

          posted on 2011-07-23 10:13 王康 閱讀(111) 評(píng)論(0)  編輯  收藏

          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 南丰县| 沅江市| 吕梁市| 冕宁县| 永定县| 卢湾区| 漳平市| 班戈县| 隆林| 四子王旗| 花莲县| 赤城县| 久治县| 墨竹工卡县| 方正县| 南昌市| 玉田县| 隆化县| 盐亭县| 增城市| 阿鲁科尔沁旗| 建德市| 广灵县| 平遥县| 合江县| 邓州市| 安康市| 湘潭市| 中宁县| 漳州市| 达州市| 东港市| 武宁县| 富蕴县| 双城市| 交城县| 徐汇区| 如东县| 望奎县| 东丽区| 盖州市|