`

Hibernate常见集合映射(Set,List Array,Map,Bag)

    博客分类:
  • j2ee
阅读更多
Hibernate常见的集合映射主要有Set,List,Array,Map,Bag等,它们的特点如下:
1) Set集合是Hibernate中基础的集合类型,元素数据一般使用外键同主表关联,Set集合非常适用于集合元素不能重复的情况。
2) Set集合是无序的,集合元素并不是按照一定的顺序排列的,而List集合是有序的,每个集合元素需要有一个表示集合序号的标识,这样可以使用该标识来获得该集合元素。
3) 数组Array使用的是List的方式来表示的。
4) Map集合的特点是使用键值对,即Key-Value结构来存放集合元素,这样就需要对应的集合元素数据库表中包含对于Key的列。
5) Set集合石无序、不能有重复元素的,Hibernate提供了一个Bag集合,用来处理重复元素的情况。值得注意的是,Bag并不是Java API,而是Hibernate提供的。Bag集合映射和List不同,List的集合元素是有序的,需要有一个集合序号来标识集合元素的位置,List元素可以重复;而Bag集合元素不需要元素序号标识,元素也是可以重复的。

首先建立数据库表,SQL语句如下:
Sql代码
1. CREATE TABLE ‘message’( 
2.    'id' int(11) NOT NULL, 
3.    'setValue' varchar(100) NOT NULL, 
4.    'listValue_id' int(11) NOT NULL, 
5.    'listValue' varchar(100) NOT NULL, 
6.    'arrayValue_id' int(11) NOT NULL, 
7.    'arrayValue' varchar(100) NOT NULL, 
8.    'mapValue_id' int(11) NOT NULL, 
9.    'mapValue' varchar(100) NOT NULL, 
10.    'bagValue' varchar(100) NOT NULL 
11. )ENGINE = InnoDB DEFAULT CHARSET = gbk 
12.  
13. CREATE TABLE 'master'( 
14.    'id' int(11) NOT NULL auto_increment, 
15.    'name' varchar(100) NOT NULL default '', 
16.    PRIMARY KEY('id') 
17. )ENGINE = InnoDB DEFAULT CHARSET = gbk 

建立角色的实体类,代码如下:
Java代码
1. import java.io.Serializable; 
2. import java.util.List; 
3. import java.util.Map; 
4. import java.util.Set; 
5.  
6. @SuppressWarnings({ "unchecked", "serial" }) 
7. public class Master implements Serializable { 
8.     private Integer id;      //主键ID属性 
9.     private String name;   //姓名name属性 
10.     private Set setValue; 
11.     private List listValue; 
12.     private String[] arrayValue; 
13.     private Map mapValue; 
14.     private List bagValue; 
15.      
16.     public Integer getId() { 
17.         return id; 
18.     } 
19.     public void setId(Integer id) { 
20.         this.id = id; 
21.     } 
22.     public String getName() { 
23.         return name; 
24.     } 
25.     public void setName(String name) { 
26.         this.name = name; 
27.     } 
28.     public Set getSetValue() { 
29.         return setValue; 
30.     } 
31.     public void setSetValue(Set setValue) { 
32.         this.setValue = setValue; 
33.     } 
34.     public List getListValue() { 
35.         return listValue; 
36.     } 
37.     public void setListValue(List listValue) { 
38.         this.listValue = listValue; 
39.     } 
40.     public String[] getArrayValue() { 
41.         return arrayValue; 
42.     } 
43.     public void setArrayValue(String[] arrayValue) { 
44.         this.arrayValue = arrayValue; 
45.     } 
46.     public Map getMapValue() { 
47.         return mapValue; 
48.     } 
49.     public void setMapValue(Map mapValue) { 
50.         this.mapValue = mapValue; 
51.     } 
52.     public List getBagValue() { 
53.         return bagValue; 
54.     } 
55.     public void setBagValue(List bagValue) { 
56.         this.bagValue = bagValue; 
57.     } 
58. } 
类Message的Hibernate映射文件Message.hbm.xml如下:
Xml代码
1. <?xml version="1.0" encoding="utf-8"?> 
2. <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
3. "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
4. <!-- 
5.     Mapping file autogenerated by MyEclipse Persistence Tools
6. --> 
7. <hibernate-mapping> 
8.     <class name="com.iprai.hibernate.collectionmapping" table="master" catalog="iprai"> 
9.         <id name="id" type="java.lang.Integer"> 
10.             <column name="id" /> 
11.             <generator class="native"></generator> 
12.         </id> 
13.         <property name="name" type="java.lang.String"> 
14.             <column name="name" length="100" not-null="true" /> 
15.         </property> 
16.         <!--Set类型映射--> 
17.         <set name="setValue" table="message">    //定义对应的表 
18.         <key column="id" /> 
19.             <element type="java.lang.String"> 
20.                <column name="setValue" /> 
21.             </element> 
22.         </set> 
23.          
24.         <!--List类型映射--> 
25.         <List name="listValue" table="message"> 
26.            <key column="id" /> 
27.            <index column="listValue_id" />    //配置主键 
28.        <element type="java.lang.String" column="listValue" /> 
29.         </List> 
30.          
31.         <!--Array类型映射--> 
32.         <array name="arrayValue" table="message">    
33.             <key column="id"/>    
34.             <list-index column="arrayValue_id"/>    
35.             <element type="java.lang.String" column="arrayValue"/>  
36.         </array>  
37.  
38.         <!--Map类型映射--> 
39.         <map name="mapValue" table="message"> 
40.            <key column="id" /> 
41.            <!--配置键值对--> 
42.            <map-key column="mapValue_id" type="java.lang.String" /> 
43.            <element type="java.lang.String" column="mapValue" /> 
44.         </map> 
45.  
46.         <!--Bag类型映射--> 
47.         <bag name="bagValue" table="message"> 
48.            <key column="id" />     //定义主键 
49.            <element type="string" column="bagValue" />  //定义元素类型 
50.        </bag> 
51.     </class> 
52. </hibernate-mapping> 

JUnit测试代码如下:
Java代码
1. import java.util.ArrayList;    
2. import java.util.HashMap;    
3. import java.util.HashSet;    
4. import java.util.List;    
5. import java.util.Map;    
6. import java.util.Set;    
7.  
8. import org.hibernate.Session;    
9.    
10. import junit.framework.TestCase;    
11.    
12. public class MasterTest extends TestCase {    
13.         
14.     public void testSave() {    
15.         Master master = new Master();    
16.         master.setName("JavaEye");    
17.          
18.         Set setValue = new HashSet();    
19.         setValue.add("a");    
20.         setValue.add("b");    
21.         master.setSetValue(setValue);    
22.             
23.          List listValue = new ArrayList();    
24.          listValue.add("c");    
25.          listValue.add("d");    
26.          master.setListValue(listValue);    
27.              
28.          String[] arrayValue = new String[]{"e", "f"};    
29.          master.setArrayValue(arrayValue);    
30.              
31.          Map mapValue = new HashMap();    
32.          mapValue.put("key_1", "value_1");    
33.          mapValue.put("key_2", "value_2");    
34.          master.setMapValue(mapValue);    
35.  
36.          List bagValue = new ArrayList(); 
37.          bagValue.add("h"); 
38.          bagValue.add("i"); 
39.          master.setBagValue(bagValue); 
40.              
41.          Session session = null;    
42.          try {    
43.              session = HibernateUtils.getSession();    
44.              session.beginTransaction();    
45.              session.save(c);    
46.              session.getTransaction().commit();    
47.          }catch(Exception e) {    
48.              e.printStackTrace();    
49.              session.getTransaction().rollback();    
50.          }finally {    
51.              HibernateUtils.closeSession(session);    
52.          }   
53.     }       
54. }   


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics