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對象添加了一條數據。

相關文章
相關標籤/搜索