日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關咨詢
選擇下列產(chǎn)品馬上在線溝通
服務時間:8:30-17:00
你可能遇到了下面的問題
關閉右側工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Hibernate的集合映射

POJOs如下:

Customer類---->customer表

Order類對應---->orders表

customer(1)<----->(n)order

 
 
 
 
  1. public class Customer  
  2. {  
  3.     private String id;  
  4.     private String username;  
  5.     private String password;  
  6.     private Timestamp registerTime;  
  7.     private int age;  
  8.     private Set orders = new HashSet();  
  9.  
  10.     /*setter and getter method*/ 
 
 
 
 
  1. public class Order  
  2. {  
  3.     private String id;  
  4.     private String orderNumber;  
  5.     private int balance;  
  6.     private Customer customer;  
  7.  
  8.     /*setter and getter method*/ 

Set集合映射:

Hibernate為集合映射提供了專用的標簽元素,Set集合映射,就使用標簽表示:

 
 
 
 
  1.  
  2.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.       
  4.      
  5.          
  6.              
  7.              
  8.                  
  9.                  
  10.              
  11.               
  12.              
  13.              
  14.              
  15.              
  16.              
  17.               
  18.              
  19.                  
  20.                  
  21.              
  22.           
  23.          
  24.      

標簽中的"name"屬性表示customer對象中關系集合的屬性名,"inverse"與"cascade"屬性說明(參考這里)。在數(shù)據(jù)庫中表示"一對多"的關系是通過外鍵關聯(lián)的方式實現(xiàn)的,"多方"通過持有"一方"的主鍵值來確定關系,怎么持有"一方"的主鍵值?"多方"將使用一列來存儲"一方"的主鍵值,然后將此列作為外鍵列參照"一方"的主鍵列。所以使用Hibernate開發(fā)時需要將兩表的關系列(外鍵列)告訴Hibernate,就是完成這個工作的,Hibernate就能根據(jù) "customer_id"列取出關聯(lián)信息。例如:從customer表中取出一條記錄后,Hibernate會根據(jù)該customer記錄的主鍵值再從order表中查找"custom_id"列,取出值相等的記錄,然后組裝到Customer對象中的set集合屬性中,反之亦然。因為取出來的記錄(只是一些零碎的值,還沒有組裝成對象)需要存放到Set集合中,所以要告訴Hibernate在Set集合里面能放什么類型的數(shù)據(jù)。這個標簽就是完成這個工作的,"class"屬性是指定這個這個Set集合里面元素的類型。

 
 
 
 
  1.  
  2.     "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
  3.       
  4.      
  5.          
  6.              
  7.                  
  8.                  
  9.              
  10.               
  11.              
  12.              
  13.               
  14.              
  15.                  
  16.                       
  17.          
  18.      

標簽是設置"一對多"關系中的"多方"的,name指定了哪一個屬性是關系屬性,"class"指定了關系屬性的類型(也指定了與哪一個表關聯(lián)), "column"屬性是指定這個關聯(lián)屬性是按照"customer_id"列的值,在customer表中查詢獲得的。

測試:

 
 
 
 
  1. tx = session.beginTransaction();  
  2.  
  3. /*  
  4.  * 創(chuàng)建Customer對象,并設置其屬性值  
  5.  */ 
  6. Customer customer = new Customer();  
  7. customer.setUsername("zhangsan");  
  8. customer.setPassword("123456");  
  9. customer.setAge(22);  
  10. customer.setRegisterTime(new Timestamp(new Date().getTime()));  
  11.  
  12. /*  
  13.  * 創(chuàng)建Order對象order1,并設置其屬性值  
  14.  */ 
  15. Order order1 = new Order();  
  16. order1.setOrderNumber("a1a2a3");  
  17. order1.setBalance(1000);  
  18. order1.setCustomer(customer);  
  19.  
  20. /*  
  21.  * 創(chuàng)建Order對象order2,并設置其屬性值  
  22.  */ 
  23. Order order2 = new Order();  
  24. order2.setOrderNumber("d3d2d1");  
  25. order2.setBalance(670);  
  26. order2.setCustomer(customer);  
  27.  
  28. customer.getOrders().add(order1);  
  29. customer.getOrders().add(order2);  
  30.  
  31. session.saveOrUpdate(customer);  
  32.  
  33. tx.commit(); 

查看數(shù)據(jù)庫的數(shù)據(jù):

customer表:

orders表 

可以看到數(shù)據(jù)被成功的插入到數(shù)據(jù)庫中了,并且"custom_id"列(關系列)也正確賦值了。

List映射:

Hibernate為集合映射提供了專用的標簽元素,List集合映射,就使用標簽表示:

 
 
 
 
  1.  
  2.      
  3.      
  4.      
  5.  

List集合是有順序的,"index"標簽,是用于記錄順序,List的順序將表現(xiàn)在"customer_index"列上,其余設置,與Set集合類似。注意:List映射中"inverse"中的值不能設置為"true",因為List集合的順序只有customer方知道,order方不知道List的存在。不然,"customer_index"的列值將不會被賦值。

查看數(shù)據(jù)庫:

customer表:

orders表:

可以看到記錄正確的插入到數(shù)據(jù)庫中了,而且"custom_index"正確的表示出List的順序。

Array(數(shù)組)映射:標簽使用其他與List基本一致。

Map映射:

Hibernate為集合映射提供了專用的標簽元素,Map集合映射,就使用標簽表示:

 
 
 
 
  1.  
  2.      
  3.      
  4.      
  5.  

Map映射中標簽,表示Map集合中的key值,記錄在"order_key"列中,表示Map集合中的vlaue。其他設置與上面一樣。注意:"inverse"不要設置成"true"因為key值是customer對象維護的,而order不知道key的存在。

Bag映射:它是List與Set集合的結合,可以重復,但是無順。使用List模擬Bag。設置類似Set,它也有專用標簽

總  結

在沒有特殊要求下,***使用Set集合,因為Set集合沒有特殊信息需要"一方"自己維護,可以完全交給"多方"維護,能夠提高性能,若需要記錄數(shù)據(jù)的順序可以使用List和Array映射,若需要key/value形式存儲數(shù)據(jù),可以使用Map映射。***一點若集合放置的數(shù)據(jù)簡單類型(原生類型、原生類型的包裝類、String、Date之類的)在集合映射配置上稍有不同,元素可以直接映射這些簡單類型,其他配置與上述配置沒什么不同。


新聞名稱:Hibernate的集合映射
網(wǎng)頁網(wǎng)址:http://m.5511xx.com/article/codhihg.html