hibernate---->Collection映射
集合, 数组类型的映射: set,list, array, map
除了下面的方法外,还可以写自定义类型,即让List, Set集合类型存储到数据库时里面的元素用,号隔开.读出来的时候又分解成集合对象.这个有点像struts的类型转换器.
注意:
* 这里使用的集合类型时,集合对象里面存放的类型是基本数据类型,而不是复杂类或自定义类.
如果是自定义类,那可以用 多对一 的映射(放在set中).
* 集合的映射比较少使用
CollectionMapping.java
package com.ncepu.hibernate; import java.util.List; import java.util.Map; import java.util.Set; public class CollectionMapping { private int id; private String name; private Set setValue; private List listValue; private String[] arrayValue; private Map mapValue; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Set getSetValue() { return setValue; } public void setSetValue(Set setValue) { this.setValue = setValue; } public List getListValue() { return listValue; } public void setListValue(List listValue) { this.listValue = listValue; } public String[] getArrayValue() { return arrayValue; } public void setArrayValue(String[] arrayValue) { this.arrayValue = arrayValue; } public Map getMapValue() { return mapValue; } public void setMapValue(Map mapValue) { this.mapValue = mapValue; } }
CollectionMapping.hbm.xml
<class name="com.ncepu.hibernate.CollectionMapping" table="t_CollectionMapping"> <id name="id"> <generator class="native"/> </id> <property name="name"/> <!--生成一个表t_set_value,用于存放set类型的数据--> <set name="setValue" table="t_set_value"> <!--生成一个主键set_id,作为外键参照t_CollectionMapping表主键--> <key column="set_id"/> <element type="string" column="set_value"/> </set> <list name="listValue" table="t_list_value"> <key column="list_id"/> <!--因为List是有序的,所以还得存放一个下标list_index--> <list-index column="list_index"/> <element type="string" column="list_value"/> </list> <array name="arrayValue" table="t_array_value"> <key column="array_id"/> <!--数组与List类型一样,也是有序的--> <list-index column="array_index"/> <element type="string" column="array_value"/> </array> <map name="mapValue" table="t_map_value"> <key column="map_id"/> <!--Map类型得存放map-key和map-value两个值--> <map-key type="string" column="map_key"/> <element type="string" column="map_value"/> </map> </class>
t_CollectionMapping
id |
name |
1 |
xxx |
t_set_values
set_id |
set_value |
1 |
a |
1 |
b |
t_list_value
list_id |
list_value |
list_index |
1 |
c |
0 |
1 |
d |
1 |
t_array_value
array_id |
array_value |
array_index |
1 |
e |
0 |
1 |
f |
1 |
t_map_value
map_id |
map_key |
map_value |
1 |
k1 |
v1 |
1 |
k2 |
v2 |