集合, 数组类型的映射: 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 |