hibernate集合映射(转载)

Hibernate集合映射  

假设有一个User类,User对象的属性包括编号,姓名,爱好(假设一我的有不少爱好,这时就要用到数组或者集合),用户日志(不少篇,也会用到数组或集合)。此时的实体Bean应该是几个属性和多个集合组成,以下:java

public class CollectionMapping implements Serializable {数据库

// 私有对象数组

private Integer id;session

private String name;app

private String[] strValues;工具

private List<String> listValues = new ArrayList<String>();测试

private Set<String> setValues = new HashSet<String>();this

private Map<String,String> mapValues = new HashMap<String, String>();spa

// 封装对象.net

public Integer getId() {

return id;

}

public void setId(Integer id) {

this.id = id;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String[] getStrValues() {

return strValues;

}

public void setStrValues(String[] strValues) {

this.strValues = strValues;

}

public List<String> getListValues() {

return listValues;

}

public void setListValues(List<String> listValues) {

this.listValues = listValues;

}

public Set<String> getSetValues() {

return setValues;

}

public void setSetValues(Set<String> setValues) {

this.setValues = setValues;

}

public Map<String, String> getMapValues() {

return mapValues;

}

public void setMapValues(Map<String, String> mapValues) {

this.mapValues = mapValues;

}

}

那么,该实体Bean该怎样配置关联映射呢?这就涉及到了Hibernate关联映射的集合映射,好比:数组的关联映射,List的关联映射,Map的关联映射等。以上面的CollectionMapping类为例,建立该类的实体关联映射文件:CollectionMapping.hbm.Xml

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd" >

<hibernate-mapping package="com.cache.demo.entity">

<class name="CollectionMapping" table="t_collection">

<id name="id">

<column name="id"></column>

<generator class="native"></generator>

</id>

<property name="name">

<column name="name"></column>

</property>

<!-- 配置数组关联映射 -->

<array name="strValues" table="t_array">

<key column="aid"></key>  <!-- 对应主表的id,也就是数据表t_collection的主键id值 -->

<list-index column="indexId"></list-index>  <!-- 数组的索引值 -->

<element type="java.lang.String" column="realValue"></element>  <!-- 在该数组表中存放的实际的值 -->

</array>

<!-- 配置List关联映射 -->

<list name="listValues" table="t_list">

<key column="lid"></key>

<list-index column="indexId"></list-index>

<element type="java.lang.String" column="realValue"></element>

</list>

<!-- 配置Map关联映射 -->

<map name="mapValues" table="t_map">

<key column="mid"></key>

<map-key type="java.lang.String" column="keyId"></map-key>

<element type="java.lang.String" column="realValue"></element>

</map>

<!-- 配置Set关联映射 -->

<set name="setValues" table="t_set">

<key column="sid"></key>

<element type="java.lang.String" column="realValue"></element>

</set>

</class>

</hibernate-mapping>

在上面的配置文件中,每一个对应的对象都有本身专用的节点,例如:数组有<array>节点,List有<List>节点,Map有<map>节点,Set有<set>节点。下面来一一认识一下:

· <array> name属性对应的是实体类中Array对象的引用名,table就是在数据库中所对应的表,     子节点<key>对应自身从属的主表的主键,即t_collection表的主键id;另外一个子节     点<element>对应的是该数组对象中存放的实际数据;<list-index>节点对应的是     该数据每条数据的索引值;

· <list>     与<array>相同;(略)

· <map> 与上面不一样的是,map对象是以键-值对形式存在的,因此map中的索引也就是key 即<map-key>节点;

· <set> set数据类型因为是无序的,因此set不存在索引,只有<key>和<element>两个节点。

配置完成后,咱们用ExportDB工具类生成表,总共生成5张表:

· t_collection (主表)

· t_array

· t_list

· t_map

· t_set

以后,编写测试类,为实体类CollectionMapping 添加一条数据:

/**

 *  向集合映射中添加一条数据

 */

public void addDataToCollection()

{

// 建立数组对象

String[] strArray = new String[3];

strArray[0]="cheng";

strArray[1]="zeng";

strArray[2]="zhang";

// 建立List对象

List<String> dataList = new ArrayList<String>();

dataList.add("s1");

dataList.add("s2");

dataList.add("y2");

// 建立Set对象

Set<String> dataSet = new HashSet<String>();

dataSet.add("Microsoft");

dataSet.add("Google");

dataSet.add("IBM");

// 建立Map对象

Map<String,String> dataMap = new HashMap<String, String>();

dataMap.put("America", "美国");

dataMap.put("China", "中国");

dataMap.put("Russia", "俄国");

// 建立CollectionMapping对象

CollectionMapping cm = new CollectionMapping();

// 设置CollectionMapping对象的值

cm.setName("个人大学");

cm.setListValues(dataList);

cm.setMapValues(dataMap);

cm.setSetValues(dataSet);

cm.setStrValues(strArray);

// 建立Session对象

Session session = HibernateSessionFactory.getSession();

// 执行添加操做

session.save(cm);

// 提交事务

session.beginTransaction().commit();

// 关闭事务

session.close();

}

这样就为CollectionMapping对象添加了一条数据。

相关文章
相关标签/搜索