国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

淺析Hibernate一對多數據關聯的問題(二)

開發 后端
這里介紹Hibernate一對多數據關聯。指的是單向一對多數據關聯一個用戶有多個地址,在用戶類TUser中包含地址類TAddress集合。

Hibernate一對多數據關聯。指的是單向一對多數據關聯一個用戶有多個地址,在用戶類TUser中包含地址類TAddress集合。

Hibernate如果上手了,那么所謂的一對多,多對一,多對多,一對一這些關系,應該很快能理解.下面主要介紹Hibernate一對多的問題。

1.由TUser對象將自身的id賦給addr.user_id,這樣導致addr屬性值變動,在事物提交的時候,會進行update。


1)當save該用戶的時候,

  1. insert into t_address  (user_id, address, zipcode, tel) value (null, "HongKong", "233123", "1123")  

2)當tx.commit()時:

  1. update t_address user_id="1"address="HongKong"zipcode="233123",tel="1123" where id=2

這樣,在save user時,就會出現約束違例。

調整方法:
可以在定義數據表字段時候,不加NOT NULL約束?;蛘咴陂_始為user_id隨意賦一個非空值(因為還要update,不正確也沒關系),或者將user_id字段從TAddress.hbm.xml中刪除(本例就是這樣實現)。但是這些都是權宜之計,用兩條SQL語句完成一次數據庫操作,性能低下。而雙向一對多解決了這個問題。
下面來實現雙向關聯:修改配置文件 TUser.hbm.xml

  1. xml version="1.0"?> 
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="cn.blogjava.start.TUser" table="T_User" catalog="sample" 
  5.      dynamic-update="true" dynamic-insert="true" 
  6.     > 
  7.         <id name="id" type="integer"> 
  8.             <column name="id" /> 
  9.             <generator class="native" /> 
  10.         id> 
  11.         <property name="name" type="string" column="name" /> 
  12.         <property name="age" type="java.lang.Integer" column="age" /> 
  13.  
  14.         <set   
  15.             name="address"   
  16.             table="t_address"   
  17.             inverse="true" 
  18.             cascade="all"   
  19.             order-by="zipcode asc" 
  20.             > 
  21.             <key column="user_id"> 
  22.             key> 
  23.             <one-to-many class="cn.blogjava.start.TAddress" /> 
  24.         set> 
  25.     class> 
  26. hibernate-mapping> 

設定inverse="true",表明將TUser類作為被動類,將數據關聯的維護工作交給關聯對象TAddress來管理。
在one-to-many模型中,將many一方設為主控方有助于性能的改善。(讓總理記住每個人困難,但是每個人記住總理方便)

TAddress.hbm.xml

  1. xml version="1.0"?> 
  2. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3. <hibernate-mapping> 
  4.     <class name="cn.blogjava.start.TAddress" table="T_Address" catalog="sample"> 
  5.         <id name="id" type="integer"> 
  6.             <column name="id" /> 
  7.             <generator class="native" /> 
  8.         id> 
  9.         <property name="address" type="string" column="address" /> 
  10.         <property name="zipcode" type="string" column="zipcode" /> 
  11.         <property name="tel" type="string" column="tel" /> 
  12.         <property name="type" type="string" column="type" /> 
  13.         <property name="idx" type="java.lang.Integer" column="idx" /> 
  14.         <many-to-one 
  15.                   name="user"   
  16.                   class="cn.blogjava.start.TUser" 
  17.                   cascade="none" 
  18.                   outer-join="auto" 
  19.                   update="true"                    
  20.                   insert="true" 
  21.                   access="property" 
  22.                   column="user_id" 
  23.                   not-null="true" 
  24.         /> 
  25.     class> 
  26. hibernate-mapping> 

2.對TAddress.java做如下改造:去掉user_id字段,增加user字段,和getter,setter方法。

  1. package cn.blogjava.start;  
  2.  
  3. import java.io.Serializable;  
  4.  
  5. public class TAddress implements Serializable {  
  6.       
  7.     private Integer id;  
  8.     private String address;  
  9.     private String zipcode;  
  10.     private String tel;  
  11.     private String type;  
  12.     private Integer idx;  
  13.     private TUser user;  
  14.       
  15.     public TUser getUser() {  
  16.         return user;  
  17.     }  
  18.     public void setUser(TUser user) {  
  19.         this.user = user;  
  20.     }  
  21.     public Integer getId() {  
  22.         return id;  
  23.     }  
  24.     public void setId(Integer id) {  
  25.         this.id = id;  
  26.     }  
  27.     public String getAddress() {  
  28.         return address;  
  29.     }  
  30.     public void setAddress(String address) {  
  31.         this.address = address;  
  32.     }  
  33.     public Integer getIdx() {  
  34.         return idx;  
  35.     }  
  36.     public void setIdx(Integer idx) {  
  37.         this.idx = idx;  
  38.     }  
  39.     public String getTel() {  
  40.         return tel;  
  41.     }  
  42.     public void setTel(String tel) {  
  43.         this.tel = tel;  
  44.     }  
  45.     public String getType() {  
  46.         return type;  
  47.     }  
  48.     public void setType(String type) {  
  49.         this.type = type;  
  50.     }  
  51.     public String getZipcode() {  
  52.         return zipcode;  
  53.     }  
  54.     public void setZipcode(String zipcode) {  
  55.         this.zipcode = zipcode;  
  56.     }  
  57.  
  58. }  

3.測試代碼
既然TUser不維護關聯關系,需要TAddress需要自己來維護TUser,所以需要addr.setUser(user);

  1. package cn.blogjava.start;  
  2.  
  3. import java.util.HashSet;  
  4. import java.util.Iterator;  
  5. import java.util.List;  
  6.  
  7. import junit.framework.Assert;  
  8. import junit.framework.TestCase;  
  9.  
  10. import org.hibernate.HibernateException;  
  11. import org.hibernate.Session;  
  12. import org.hibernate.SessionFactory;  
  13. import org.hibernate.Transaction;  
  14. import org.hibernate.cfg.Configuration;  
  15.  
  16.  
  17. public class HibernateTest extends TestCase {  
  18.       
  19.     Session session = null;  
  20.  
  21.     protected void setUp() {  
  22.         try {  
  23.             Configuration config = new Configuration().configure();  
  24.             SessionFactory sessionFactory = config.buildSessionFactory();  
  25.             session = sessionFactory.openSession();  
  26.               
  27.         } catch (HibernateException e) {  
  28.             e.printStackTrace();  
  29.         }          
  30.     }  
  31.  
  32.     protected void tearDown() {  
  33.         try {  
  34.             session.close();          
  35.         } catch (HibernateException e) {  
  36.             e.printStackTrace();  
  37.         }          
  38.     }      
  39.       
  40.     /** *//**  
  41.      * 對象持久化測試(Insert方法)  
  42.      */          
  43.     public void testInsert() {  
  44.         Transaction tran = null;  
  45.         try {  
  46.           
  47.             TUser user = new TUser();  
  48.             user.setName("byf");  
  49.             user.setAge(new Integer(26));  
  50.               
  51.             TAddress addr = new TAddress();  
  52.             addr.setTel("1123");  
  53.             addr.setZipcode("233123");  
  54.             addr.setAddress("HongKong");  
  55.             addr.setUser(user);  
  56.               
  57.             TAddress addr2 = new TAddress();  
  58.             addr2.setTel("139");  
  59.             addr2.setZipcode("116001");  
  60.             addr2.setAddress("dalian");         
  61.             addr2.setUser(user);  
  62.  
  63.             TAddress addr3 = new TAddress();  
  64.             addr3.setTel("136");  
  65.             addr3.setZipcode("100080");  
  66.             addr3.setAddress("beijing");  
  67.             addr3.setUser(user);  
  68.               
  69.             //設置關聯  
  70.             HashSet set = new HashSet();  
  71.             set.add(addr);  
  72.             set.add(addr2);  
  73.             set.add(addr3);  
  74.             user.setAddress(set);  
  75.                                      
  76.             tran = session.beginTransaction();                                  
  77.             //插入user信息  
  78.             session.save(user);  
  79.             session.flush();  
  80.             tran.commit();  
  81.             Assert.assertEquals(user.getId().intValue()>0 ,true);  
  82.         } catch (HibernateException e) {  
  83.             e.printStackTrace();  
  84.             Assert.fail(e.getMessage());  
  85.             if(tran != null) {  
  86.                 try {  
  87.                     tran.rollback();  
  88.                 } catch (Exception e1) {  
  89.                     e1.printStackTrace();  
  90.                 }  
  91.             }  
  92.         }  
  93.     }  
  94.       
  95.     /** *//**  
  96.      * 對象讀取測試(Select方法)  
  97.      */              
  98.     public void testSelect(){  
  99.         String hql = " from TUser where name='byf'";  
  100.         try {  
  101.             List userList = session.createQuery(hql).list();  
  102.             TUser user = (TUser)userList.get(0);  
  103.             System.out.println("user name is " + user.getName());  
  104.               
  105.             for (Iterator iter = user.getAddress().iterator(); iter.hasNext();) {  
  106.                 TAddress addr = (TAddress) iter.next();  
  107.                 System.out.println("user address is " + addr.getAddress());                  
  108.             }  
  109.             Assert.assertEquals(user.getName(), "byf");  
  110.         } catch (Exception e) {  
  111.             e.printStackTrace();  
  112.             Assert.fail(e.getMessage());  
  113.         }  
  114.     }  

以上介紹Hibernate一對多數據關聯。

【編輯推薦】

  1. 生成Hibernate Mapping文件的分析
  2. 對Hibernate中get()與load()不同點分析
  3. Struts-Spring-Hibernate案例
  4. 簡述Hibernate配置連接池
  5. 淺析Hibernate一對多數據關聯的問題(一)
責任編輯:仲衡 來源: baidu
相關推薦

2009-09-23 10:37:50

Hibernate一對

2012-03-21 11:43:41

JavaHibernate

2012-02-08 13:34:08

HibernateJava

2009-09-22 09:55:58

Hibernate實例

2009-06-04 10:34:19

Hibernate一對一對多關系配置

2009-06-04 16:14:22

Hibernate一對Hibernate一對Hibernate多對

2009-06-03 16:27:27

Hibernate一對一關系

2010-04-15 09:09:02

Hibernate

2009-08-17 10:34:51

NHibernate一

2009-06-03 16:18:16

Hibernate關系代碼實例

2009-09-22 17:32:38

Hibernate A

2009-06-17 14:55:26

Hibernate數據

2009-06-24 07:58:52

Hibernate多數

2009-09-28 17:23:51

Hibernate E

2010-07-07 08:33:09

SQL Server學

2009-12-23 09:31:11

寬帶路由上網故障

2009-09-21 13:31:10

Hibernate 3

2009-09-21 18:13:11

Hibernate S

2009-09-23 17:28:55

Hibernate C

2009-09-21 12:50:34

Hibernate架構
點贊
收藏

51CTO技術棧公眾號

99青春婷婷视频| 黑人巨大精品欧美一区二区免费| 免费在线视频欧美| 国产在线一区二| 色欧美日韩亚洲| 欧美gay男男猛男无套| 最美情侣韩剧在线播放| 91精品久久久久久久久久久久久| 精品欧美国产一区二区三区| 亚洲午夜精品一区二区国产| caoporn国产精品免费视频| 久久99国产精品| 日韩免费一区二区| 国产乱码精品一区二区三区av| 成人深夜福利| jizz大全欧美jizzcom| 国产精品第1页| 日本高清不卡在线观看| 性欧美精品高清| 中文字幕乱码在线播放| 天天夜碰日日摸日日澡性色av| 久久不射热爱视频精品| 亚洲视频精选在线| 欧美粗暴jizz性欧美20| av中文字幕在线播放| 欧美 日韩 国产精品| 欧美日韩福利电影| 一区二区三区影院| 亚洲第一毛片| 成人免费av电影| www.成人69.com| 国产成人免费观看| 日韩激情视频在线| 国产精品久久三| 色多多在线观看| 91福利资源站| 日韩一区精品字幕| 欧美韩国亚洲| 成人影院一区二区三区| 成人有码在线播放| 亚洲国产高清自拍| 中文av一区二区| 天天综合亚洲| 国模精品视频| 成人毛片免费在线观看| 国产精品一区二区三区在线观 | 小黄鸭精品aⅴ导航网站入口| 激情内射人妻1区2区3区| 91在线精品播放| 日韩精品欧美国产精品忘忧草| 欧美激情一区二区在线| 日韩视频一区| 高清一区二区中文字幕| 男男电影完整版在线观看| 日本免费a视频| 成人动漫网站在线观看| 亚洲人成网站色ww在线| 精品二区三区线观看| 国产91精品免费| 亚洲精品久久久| 精品三级久久| 粉嫩粉嫩芽的虎白女18在线视频| 中文字幕剧情在线观看一区| 茄子视频成人在线| 日韩精品视频中文在线观看| 亚洲高清三级视频| 高潮精品一区videoshd| 欧美久久九九| 精品伊人久久久| 欧美6一10sex性hd| 少妇高潮露脸国语对白| 久久久久久久免费视频| 91欧美视频网站| 欧美精品在线观看| 日韩欧美一区中文| 亚洲综合激情另类小说区| 国产麻豆视频一区| 影音先锋亚洲电影| 香蕉视频一区| 高清电影一区| 免费在线午夜视频| 国内福利写真片视频在线| 和岳每晚弄的高潮嗷嗷叫视频| 国产精品久久久久久久小唯西川| 午夜精品免费视频| 亚洲图片欧美日产| 777奇米四色成人影色区| 中文字幕中文字幕中文字幕亚洲无线 | 国产资源精品在线观看| 一区二区三区在线电影| 六月丁香久久丫| 成人国产一区| 国产蜜臀一区二区打屁股调教| 污视频网站在线| 成人看片app| 欧美深夜福利视频| 亚洲欧美日韩精品在线| 成人综合色站| 国产日韩欧美日韩大片| 国模gogo一区二区大胆私拍| 亚洲一区二区国产| 亚洲福利视频久久| 91精品国产麻豆国产自产在线| 天天做天天摸天天爽国产一区| 99精品视频中文字幕| 捆绑变态av一区二区三区| 中文一区在线| 伊人久久大香线蕉综合热线| 日韩av专区| 激情综合网站| 欧美日韩一本| 国产精品久久久网站| 国产一区二区三区| 中文另类视频| 成人va天堂| 瑟瑟视频在线看| 超碰高清在线| 手机在线理论片| 在线能看的av网址| 在线观看爽视频| 成人免费看视频网站| 亚洲欧洲美洲av| 亚洲国产福利| 欧美特大特白屁股xxxx| 日本免费一区二区三区四区| 亚洲啊v在线| 你懂得影院夜精品a| 国产综合色在线观看| av福利在线导航| 精品极品在线| 国产精欧美一区二区三区蓝颜男同| 国产高清视频色在线www| heyzo在线播放| 国产精品av一区二区三区 | 欧美不卡在线一区二区三区| 国产一区不卡在线观看| 国产精品三区在线| 精品无码久久久久国产| 欧美另类视频在线| 亚洲色图自拍| 波多野结衣与黑人| 黄色成人在线看| 精品久久一二三| 红桃av在线播放| 亚洲色图 在线视频| 国产男小鲜肉同志免费| 在线资源av| 第一页在线观看| 天堂av资源在线观看| 悠悠资源网亚洲青| www.91精品| 曰本一区二区三区视频| 999精品色在线播放| 99精品热6080yy久久| 亚洲乱码国产乱码精品精98午夜 | 男女激烈动态图| 超碰超碰在线观看| 日韩中文字幕av| 欧美magnet| 欧美性感美女h网站在线观看免费| 91精品动漫在线观看| 激情综合久久| 日本欧洲一区二区| www.日韩在线| 日本福利片在线| 26uuu另类欧美| 成人一区二区电影| 91丨精品丨国产| 欧美精品一二三| 天天插天天操天天射| 喷水一区二区三区| 国产视频一区二区三区四区| 亚洲三级电影| 国产综合欧美在线看| 亚洲激情啪啪| 久久久999免费视频| 毛片毛片毛片毛片| yourporn在线观看视频| 黄视频网站在线观看| 综合伊人久久| 欧美精品1区| 国产精品一级在线| 亚洲欧美一区二区三区孕妇| 欧美中文字幕一区| 国产亚洲日本欧美韩国| 91精品国产乱码久久久久久久久| 成人网在线免费观看| 色综合视频二区偷拍在线| 日本精品免费在线观看| 曰本人一级毛片免费完整视频| 国产一二区在线观看| 久久伊人影院| 在线欧美三区| 国产亚洲欧美日韩在线一区| 在线免费不卡电影| 精品国产网站地址| 国产伦精品一区二区三区视频孕妇 | 欧美日韩 国产精品| 国产高清久久久| 五月综合激情网|