Hibernate集合映射
当蜘蛛网无情地查封了我的炉台,当灰炉的余烟叹息着贫困的悲哀,我依然固执的铺平失望的灰烬
用美丽的雪花写下:相信未来
有时自己是迷惘的,但是再迷惘不要停下脚步,可能你没有目标,但是走着走着就有了梦想。
总结 Set、List、Map、Array集合映射的基本用法
- Set 在User类中有一个set属性
对应的User.hbm.xml文件中的配置如下:package com.school.domain; import java.util.Set; public class User { private Integer id; private String name; private Set<String> addressSet; 。。。。。。 }
<set name="addressSet" table="user_address" order-by="address desc"> <key column="addId"></key> <element column="address" type="string"></element> </set>
- table是集合对应的新的表明、key指的user_address表是对应的FK(外键)它参考user的主键、element是user_address的元组。虽然set是无序的但是他的实现类可以按照特定的方式进行排序,当然hibernate中提供了对set进行排序的操作:order-by可以指定set集合的排序方式,但是set集合中的对象必须实现Comparable接口,Set对象要由TreeSet来创建,不能有HashSet创建否则不能排序。表结构示意图:
- List集合:
package com.school.domain; import java.util.Set; public class User { private Integer id; private String name; private List<String> addressList; 。。。。。。 }
- table是集合对应的新的表明、key指的user_address表是对应的FK(外键)它参考user的主键、element是user_address的元组。虽然set是无序的但是他的实现类可以按照特定的方式进行排序,当然hibernate中提供了对set进行排序的操作:order-by可以指定set集合的排序方式,但是set集合中的对象必须实现Comparable接口,Set对象要由TreeSet来创建,不能有HashSet创建否则不能排序。表结构示意图:
对应的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一样: