Hibernate集合映射

Hibernate集合映射

     当蜘蛛网无情地查封了我的炉台,当灰炉的余烟叹息着贫困的悲哀,我依然固执的铺平失望的灰烬

                                                                                                                        用美丽的雪花写下:相信未来

     有时自己是迷惘的,但是再迷惘不要停下脚步,可能你没有目标,但是走着走着就有了梦想。

  

           总结 Set、List、Map、Array集合映射的基本用法

  1. Set  在User类中有一个set属性
    package com.school.domain;
    
    import java.util.Set;
    
    public class User {
    	private Integer id;
    	private String name;
    	private Set<String> addressSet;
    
    。。。。。。
    }
    
     对应的User.hbm.xml文件中的配置如下:
    <set name="addressSet" table="user_address" order-by="address desc">
    	<key column="addId"></key>
    	<element column="address" type="string"></element>
    </set>
    1.  table是集合对应的新的表明、key指的user_address表是对应的FK(外键)它参考user的主键、element是user_address的元组。虽然set是无序的但是他的实现类可以按照特定的方式进行排序,当然hibernate中提供了对set进行排序的操作:order-by可以指定set集合的排序方式,但是set集合中的对象必须实现Comparable接口,Set对象要由TreeSet来创建,不能有HashSet创建否则不能排序。表结构示意图:
       
       
    2.  List集合:
    package com.school.domain;
    
    import java.util.Set;
    
    public class User {
    	private Integer id;
    	private String name;
    	private List<String> addressList;
    
    。。。。。。
    }

           对应的User.hdm.xml

	<list name="addressList" table="user_address">
			<key column="addId"></key>
			<list-index column="index_"></list-index>
			<element type="string" column="address"></element>
	</list>
 因为这里的List集合是有顺序的,其在数据库中是按照索引来进行排序的,List集合中可以存在相同的对象。

下面是表的存储结构:


                 
 但是这里有一个问题,就是在上面的前两项被删除后,在从数据库中获得user对象的addressList的size是4但是前两个对象是null的,但是假如删除的是后两项就不存在这个问题,原因是List集合在数据库中是按照index_来进行索引,index_的最大值也就是该addressList的长度。

    

 

3.Map集合:

     因为Map结构就是一个Key对应一个Object,其中key是不可以重复的,Object是可以重复的,因为每个键值对是根据Key来进行取值,所以有一个<map-key 的属性需要配置>

package com.school.domain;

import java.util.*;

public class User {
	private Integer id;
	private String name;
	private Map<String,String> addressMap;

。。。。。。
}

           对应的User.hdm.xml

<map name="addressMap" table="user_addrress">
	<key column="addId"></key>
	<map-key type="string" column="map_key"></map-key>
	<element column="address" type="string"></element>
</map>

 对应的表结构如下图:

 4.array 数组映射:

   因为数组的结构和List的结构是相同的,所以在配置上面也是相似的

package com.school.domain;

import java.util.*;

public class User {
	private Integer id;
	private String name;
	private String[] addresses;

。。。。。。
}
对应的User.hdm.xml配置是:

 

<array name="addresses" table="user_address">
	<key column="addId"></key>
	<list-index column="index_"></list-index>
	<element type="string" column="address"></element>
</array>

 对应的表结构和List一样:

 

 

 

 

 

 

 

 

 

 

 

 

猜你喜欢

转载自dxz.iteye.com/blog/2145763