多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

國內(nèi)最全IT社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當前位置:首頁 > 互聯(lián)網(wǎng) > Hibernate關聯(lián)關系映射之一對一關聯(lián)關系

Hibernate關聯(lián)關系映射之一對一關聯(lián)關系

來源:程序員人生   發(fā)布時間:2014-10-21 08:00:00 閱讀次數(shù):3072次

人和身份證之間就是一個典型的一對一關聯(lián)關系。實現(xiàn)一對一關聯(lián)關系映射的方式有兩種一種是基于外鍵,一種是基于主鍵,下面我們先看基于外鍵的關聯(lián)方式

首先看他們的實體類

Person類

package entity; public class Person { private Integer id; private String name; private IdCard idCard; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public IdCard getIdCard() { return idCard; } public void setIdCard(IdCard idCard) { this.idCard = idCard; } }

然后看IdCard類

package entity; public class IdCard { private Integer id; private String number; private Person person; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getNumber() { return number; } public void setNumber(String number) { this.number = number; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }

這里在Person類和IdCard類中分別有一個對方類型的屬性。

然后看他們之間的關聯(lián)關系映射,首先看Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="entity.Person" table="Person" schema="MYHR"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="NAME" not-null="true" /> </property> <!-- idCard屬性,IdCard類型,表達本類與IdCard的一對一關聯(lián) --> <!-- 采用基于外鍵的一對一,本方無外鍵方 --> <!-- property-ref屬性:對方映射中外鍵類對應的屬性名 --> <one-to-one name="idCard" class="entity.IdCard" property-ref="person"> </one-to-one> </class> </hibernate-mapping>

然后看一下IdCard.hbm.xml文檔

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="entity.IdCard" table="IdCard" schema="MYHR"> <id name="id"> <column name="ID"/> <generator class="assigned" /> </id> <property name="number"> <column name="NAME" not-null="true" /> </property> <!-- person屬性,Person類型,表示與Person類的一對一關聯(lián)關系 --> <!-- 采用基于外鍵的一對一關聯(lián)方式,本方有外鍵 --> <many-to-one name="person" column="personId" class="entity.Person" unique="true"></many-to-one> </class> </hibernate-mapping>

這樣Person和IdCard之間的一對一關聯(lián)關系就搭建好了,然后看一下測試類

package test; import static org.junit.Assert.*; import org.hibernate.Session; import org.hibernate.Transaction; import entity.IdCard; import entity.Person; import factory.HibernateSessionFactory; public class Test { private Session session = null; private Transaction tran = null; @org.junit.Test public void save() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ //新建對象 Person p = new Person(); p.setId(1); p.setName("張三"); IdCard idCard = new IdCard(); idCard.setId(1); idCard.setNumber("10001"); p.setIdCard(idCard); idCard.setPerson(p); session.save(p); session.save(idCard); tran.commit(); }catch(Exception e){ tran.rollback(); } } @org.junit.Test public void Get() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ Person person = (Person) session.get(Person.class, 1); IdCard idCard = person.getIdCard(); System.out.println(person.getName()+"身份證號:"+idCard.getNumber()); tran.commit(); }catch(Exception e){ tran.rollback(); } } //解除關系 @org.junit.Test public void RemoveRelation() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ //從有外鍵方接觸關聯(lián)關系可以,不可以從無外鍵方解除 IdCard idCard = (IdCard)session.get(IdCard.class, 1); idCard.setPerson(null); tran.commit(); }catch(Exception e){ tran.rollback(); } } //刪除 @org.junit.Test public void DeleteRelation() { session = HibernateSessionFactory.getSession(); tran = session.beginTransaction(); try{ //如果沒有關聯(lián)對方,可以直接刪除。 //如果有關聯(lián)對方,且可以維護關聯(lián)關系,他就會先刪除關聯(lián)關系,在刪除自己。 //如果有關聯(lián)關系,且不能維護關聯(lián)關系,所以會執(zhí)行刪除自己,并且拋出異常。 IdCard idCard = (IdCard)session.get(IdCard.class, 1); session.delete(idCard); tran.commit(); }catch(Exception e){ tran.rollback(); } } }

這就是基于外鍵方式,基于主鍵的方式只需要在以上基礎修改一下映射文件即可,下面分別看一下修改后的映射文件

首先看Person.hbm.xml

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="entity"> <class name="entity.Person" table="Person" schema="MYHR"> <id name="id" type="int"> <column name="ID" /> <generator class="assigned" /> </id> <property name="name" type="string"> <column name="NAME" not-null="true" /> </property> <!-- idCard屬性,IdCard類型,表達本類與IdCard的一對一關聯(lián) --> <!-- 采用基于主鍵的一對一,本方無外鍵方 --> <one-to-one name="idCard" class="entity.IdCard"/> </class> </hibernate-mapping>

然后看IdCard.hbm.xml

<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="entity"> <class name="entity.IdCard" table="IdCard" schema="MYHR"> <id name="id" type="int"> <column name="ID" /> <!-- 當使用基于主鍵的一對一映射時,有外鍵方的主鍵生成策略是foreign, --> <!-- 參數(shù)property:生成主鍵值時所根據(jù)的對象 --> <generator class="foreign"> <param name="property">person</param> </generator> </id> <property name="number" type="string"> <column name="NAME" not-null="true" /> </property> <!-- person屬性,Person類型,表示與Person類的一對一關聯(lián)關系 --> <!-- 采用基于主鍵的一對一關聯(lián)方式,本方有外鍵 --> <one-to-one name="person" class="entity.Person" constrained="true" /> </class> </hibernate-mapping>

 

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: 操片| 手机看片福利日韩欧美看片 | 亚洲特黄大黄一级毛片 | 亚洲欧美日韩高清一区二区三区 | 在线播放人成午夜免费视频 | 欧美妇性猛交视频 | 久久久久国产精品免费 | 波多野结衣精品一区二区三区 | 国产精品乱码一区二区三区 | 亚洲国产精品激情在线观看 | 综合图片亚洲 | 国产高清一 | 欧美日本高清一本二本三本 | 亚洲免费观看网站 | 精品一区二区三区 不卡高清 | 国产精品久久一区一区 | 特级做爰片毛片在线播放 | 国产视频www | 91se在线看片国产免费观看 | 免费国产成高清人在线视频 | 日本欧美一区二区三区乱码 | 欧美一区二区三区东南亚 | 欧美一级免费观看 | 手机在线观看免费视频 | 日本高清无吗免费播放 | 亚洲高清免费 | 国产精品欧美一区二区在线看 | h亚洲| 亚洲精品久久久久久久网站 | 手机在线一区二区三区 | 亚洲一区二区三区深夜天堂 | 亚洲a网站| 欧美18-19sex| 国产成人精品久久二区二区 | 中国性xxxxxbbbbb | 免费国产在线观看老王影院 | 欧美大片a一级毛片视频 | 99影视在线视频免费观看 | 亚洲国产成人在线观看 | 日韩午夜网站 | 国产精品免费视频一区一 |