日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內最全IT社區平臺 聯系我們 | 收藏本站
阿里云優惠2
您當前位置:首頁 > php開源 > 綜合技術 > 千山萬水之Hibernate(五)――關聯映射(一對一)

千山萬水之Hibernate(五)――關聯映射(一對一)

來源:程序員人生   發布時間:2015-05-22 08:46:22 閱讀次數:2533次

知道了多對1關聯映照的映照原理,我們再來看1對1關聯的情況,1對1分映照有兩種實現方案:

1對1主鍵關聯映照

對其中關聯的情況我們又各分為單向、雙向兩種,而對1對1,Hibernate采取one-to-one標簽進行標識。

原理分析

我們拿人(Person)與身份證件(IdCard)為1對1關聯對象的示例,他們的實體關系圖為:
一對一關聯-單向
采取第1種方案,則Person對應數據庫表與IdCard對應數據庫表中的主鍵是逐一對應的,不需要添加過剩的字段來表示外鍵。Person關聯映照文件中的配置為:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping⑶.0.dtd"> <hibernate-mapping> <class name="com.tgb.hibernate.Person" table="t_person"> <id name="id"> <!-- 主鍵策略foreign --> <generator class="foreign"> <!-- property指關聯對象 --> <param name="property">idCard</param> </generator> </id> <property name="name" /> <one-to-one name="idCard" constrained="true" /> </class> </hibernate-mapping>

注:one-to-one標簽中的 constrained=”true”表示當前主鍵同時也是1個外鍵,參照IdCard中的主鍵。

操作示例

1.調用session的Load方法,得出Person對象的級聯班級對象IdCard

public void testLoad(){ Session session = null; Transaction tx = null; try{ session = HibernateUtils.getSession(); tx = session.beginTransaction(); Person person = (Person)session.load(Person.class, 1); System.out.println("person.name = " + person.getName()); System.out.println("person.idCard.cardNo = " + person.getIdCard().getCardNo()); session.save(person); tx.commit(); }catch(Exception e){ e.printStackTrace(); if(tx != null){ tx.rollback(); } }finally{ HibernateUtils.closeSession(session); } }

與上篇文章介紹的類似,通過one-to-one標簽的作用,我們查詢Person對象的同時,級聯查詢除IdCard對象

2.默許級聯保存Idcard機制

public void testSave(){ Session session = null; Transaction tx = null; try{ session = HibernateUtils.getSession(); tx = session.beginTransaction(); IdCard idCard = new IdCard(); idCard.setCardNo("11111111111"); Person person = new Person(); person.setName("張3"); person.setIdCard(idCard); session.save(person); tx.commit(); }catch(Exception e){ e.printStackTrace(); if(tx != null){ tx.rollback(); } }finally{ HibernateUtils.closeSession(session); } }

上篇文章中我們提到過,在援用有Transient對象的Persistent狀態的對象進行保存時,會出現異常,但在1對1主鍵關聯映照上不會出現此種情況。也就是說,1對1默許帶有cascade屬性。對1對1主鍵關聯映照,雙向關聯的配置即是在IdCard端加入one-to-one標簽便可,此標簽僅影響加載,不影響存儲。
綜合來看將來如果改成多對1則不可修改,靈活性較差、擴大性不好。

1對1外鍵關聯映照

我們可將1對1的情況看做是多對1情況的1種極端體現,我們可以采取many-to-one標簽配合unique屬性來給其相對應的表上添加外鍵字段,這類方式可解決使用主鍵關聯映照的弊端。相干映照文件以下:

<?xml version="1.0"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping⑶.0.dtd"> <hibernate-mapping> <class name="com.tgb.hibernate.Person" table="t_person"> <id name="id"> <generator class="native" /> </id> <property name="name" /> <many-to-one name="idCard" unique="true"></many-to-one> </class> </hibernate-mapping>

有關相應的操作,可參照前1篇文章的多對1下示例。

總結

我們可以看到1對1主鍵關聯到1對1外鍵關聯的轉變可以看做是另外一種角度下看待問題,通過這樣的思想,1些本來要求刻薄的情況我們一樣可以通過另外一種方式來處理,到達相同的效果,并且實現將來變更的靈活應對。

生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關閉
程序員人生
主站蜘蛛池模板: aaa日本高清在线播放免费观看 | 欧美成人一区二免费视频软件 | 国产在线观看一区二区三区 | 欧美日韩中文字幕在线视频 | 日韩精品在线一区二区 | 国产精品久久久亚洲 | 国产日韩精品视频 | 久久国产一区二区 | 婷婷五月在线视频 | 99精品一区二区三区 | 国产视频1区 | 狠狠色伊人亚洲综合成人 | 久久一区视频 | 成人精品一区二区户外勾搭野战 | 亚洲欧美日本在线 | 成人黄色小视频 | 精品国产一二三区 | 岛国av免费观看 | 日韩福利一区二区 | 精品少妇一区二区三区日产乱码 | 伊人精品 | 久久色av| 久久最新| 欧美性猛交xxxx黑人 | 这里有精品视频 | 电影 在线 | 亚洲欧美日韩国产综合 | 都市激情国产精品 | 精品99在线 | 黄大片| 免费成人av网站 | 成年人免费观看视频网站 | 久久se精品一区精品二区 | 三级av在线播放 | 精品国产一区二区三区四区在线观看 | www.色五月.com| 国产一区二区视频在线 | 激情久久网 | 久久综合伊人77777蜜臀 | 一区二区国产精品视频 | 国产精品国产精品国产专区不蜜 |