`

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. }   


分享到:
评论

相关推荐

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

    常见的集合映射类型有 Set、List、Array、Map 和 Bag 等,每种类型都有其特点和应用场景。 Set 集合映射 Set 集合是 Hibernate 中基础的集合类型,元素数据一般使用外键同主表关联。Set 集合非常适用于集合元素不...

    hibernate map 集合映射

    在Hibernate的映射文件(.hbm.xml)中,我们通常使用`&lt;set&gt;`, `&lt;list&gt;`, `&lt;map&gt;`等标签来定义集合映射。每个标签都有对应的属性,例如: - `name`: 对象属性名。 - `table`: 所映射的数据库表名。 - `inverse`: ...

    JAVA培训-HIBERNATE的集合映射.doc

    在给定的文档“JAVA培训-HIBERNATE的集合映射.doc”中,主要讲解了Hibernate如何处理不同类型的集合映射,包括Set、List、Array、Map和Bag。我们将详细讨论这些集合映射以及它们在实际应用中的使用。 首先,我们来...

    [原]Hibernate集合映射

    Hibernate支持多种集合映射类型,包括List、Set、Map、Bag、Array等。它们之间的区别主要在于元素的唯一性、顺序性和映射到数据库的实现方式。例如,List和Array维护元素的插入顺序,而Set不允许重复元素;Map则...

    hibernate中的集合映射范例程序

    在Java中,常见的集合类型有List、Set、Map等,它们在Hibernate中都有对应的映射方式。 1. **List映射**:List是最基础的集合类型,它允许元素重复并保持插入顺序。在Hibernate中,我们可以使用`&lt;list&gt;`标签来映射...

    hibernate源码分析过程

    集合映射可以是 set、list、map、bag、array 等。级联策略控制可以控制集合元素的保存和删除。排序策略可以控制集合元素的顺序。 聚合映射 Hibernate 的聚合映射可以将多个对象聚合到一个对象中。聚合映射可以是...

    hibernate学习笔记

    在 Hibernate 中,可以通过 `&lt;set&gt;` 标签来配置 Set 集合的映射。下面详细介绍 `&lt;set&gt;` 标签的各个属性: - **name**:必须指定的属性,表示集合的名称。 - **access**:可选属性,指定访问策略。 - **table**:可...

    HibernatJPA_Colecciones:映射集合

    在Hibernate中,集合可以通过`&lt;set&gt;`, `&lt;list&gt;`, `&lt;map&gt;`, `&lt;bag&gt;` 或 `&lt;array&gt;` 标签进行映射。每个标签对应不同的集合类型,例如: 1. `&lt;set&gt;`:对应Set接口,不允许有重复元素。 2. `&lt;list&gt;`:对应List接口,元素...

    nhibernate 类文件 映射文件 生成工具 NGen

    6. Bag、Set、List、Array、Map:用于表示集合类型的映射,如列表或映射关系。 NGen工具的主要功能是: 1. 预先编译:NGen会将IL(中间语言)代码转换为本机机器码,使得应用程序在运行时无需再进行JIT(Just-In-...

    hibernate inverse和cascade的详细讲解

    该属性仅存在于集合标记的元素中,如`&lt;set&gt;`、`&lt;map&gt;`、`&lt;list&gt;`、`&lt;array&gt;`和`&lt;bag&gt;`等。它的作用是决定是否将对集合对象的修改反映到数据库中。 - **Inverse 的作用** - **定义**:`inverse`属性决定了一端是否...

    面向中小型企业的交互式CAPP系统的设计与实现1

    5. **集合类型**:`set`、`map`、`list`、`bag`、`array`等元素定义了集合类型在Hibernate中的实现方式。 6. **继承策略**:`subclass`、`joined-class`、`union-class`等元素用于定义不同的继承策略。 #### 三、...

Global site tag (gtag.js) - Google Analytics