鍍金池/ 教程/ Java/ Hibernate集合映射
Hibernate繼承映射
Hibernate每個(gè)子類一張表(使用XML文件)實(shí)例
Hibernate快速入門
Hibernate使用注釋
Hibernate使用xml文件的每個(gè)類層次一張表
Hibernate命名查詢
Hibernate每個(gè)層次類一張表(使用注釋)
Hibernate組件映射
Hibernate事務(wù)管理
Hibernate二級(jí)緩存
集合映射Set(使用xml文件)
Hibernate每個(gè)具體類一張表映射(使用XML)
集合映射中的映射列表(使用xml文件)
Hibernate使用Log4j日志記錄(使用properties文件)
Hibernate集合映射
集合Map映射(使用xml文件)
集合Set映射一對(duì)多(使用xml文件)
Hibernate查詢語(yǔ)言(HQL)
Hibernate入門程序
Hibernate標(biāo)準(zhǔn)查詢語(yǔ)言
Hibernate使用Log4j日志記錄(使用xml文件)
Hibernate教程
Hibernate體系結(jié)構(gòu)
Hibernate生成器類
Hibernate通過(guò)many-to-one元素的一對(duì)一映射
集合Map多對(duì)多映射(使用xml文件)
Web應(yīng)用程序使用Hibernate
Hibernate一對(duì)多映射列表實(shí)例(使用xml文件)
Hibernate通過(guò)one-to-one元素的一對(duì)一映射
Hibernate每個(gè)子類一張表(使用注釋)實(shí)例
集合映射中的映射包(使用xml文件)
通過(guò)Bag一對(duì)多映射示例(使用xml文件)
Hibernate緩存
Hibernate每個(gè)具體類一張表映射(使用注釋)

Hibernate集合映射

可以在Hibernate中映射持久類的集合元素。 您需要從以下類型之一聲明持久類中的集合類型:

  • java.util.List
  • java.util.Set
  • java.util.SortedSet
  • java.util.Map
  • java.util.SortedMap
  • java.util.Collection
  • 或?qū)懭?code>org.hibernate.usertype.UserCollectionType的實(shí)現(xiàn)

持久化類應(yīng)該像這樣定義為collection元素,如下代碼示例 -

package com.yiibai;  

import java.util.List;  

public class Question {  
private int id;  
private String qname;  
private List<String> answers;//List can be of any type  

//getters and setters  

}

映射文件中的映射集合

有很多<class>元素的子元素用來(lái)映射集合。 它們是<list>,<bag>,<set><map>。 下面來(lái)看看看如何實(shí)現(xiàn)上述類的列表:

<class name="com.yiibai.Question" table="q100">  
<id name="id">  
<generator class="increment"></generator>  
</id>  
<property name="qname"></property>  

<list name="answers" table="ans100">  
<key column="qid"></key>  
<index column="type"></index>  
<element column="answer" type="string"></element>  
</list>  

</class>

列表中使用了三個(gè)子元素:

  • <key>元素用于根據(jù)Question類標(biāo)識(shí)符定義該表中的外鍵。
  • <index>元素用于標(biāo)識(shí)類型。ListMap是索引集合。
  • <element>用于定義集合的元素。

這是集合存儲(chǔ)字符串對(duì)象的映射。 但是如果集合存儲(chǔ)實(shí)體引用(另一個(gè)類對(duì)象),我們需要定義<one-to-many><many-to-many>元素。 現(xiàn)在,持久化類將如下所示:

package com.yiibai;  

import java.util.List;  

public class Question {  
private int id;  
private String qname;  
private List<Answer> answers;//Here, List stores the objects of Answer class  

//getters and setters  

}

Answer類代碼示例如下 -

package com.yiibai;  
import java.util.List;  
public class Answer {  
private int id;  
private String answer;  
private String posterName;  
//getters and setters  
}

現(xiàn)在映射文件將是:

<class name="com.yiibai.Question" table="q100">  
    <id name="id">  
        <generator class="increment"></generator>  
    </id>  
    <property name="qname"></property>  

    <list name="answers" >  
        <key column="qid"></key>  
        <index column="type"></index>  
        <one-to-many class="com.yiibai.Answer" />  
    </list>  

</class>

這里,列表被一對(duì)多關(guān)系映射。 在這種情況下,一個(gè)問(wèn)題可以有很多答案。

key元素

key元素用于根據(jù)原始身份在連接的表中定義外鍵。 外鍵元素默認(rèn)為空。 所以對(duì)于不可空的外鍵,需要指定not-null屬性,如:

<key column="qid" not-null="true" ></key>

key元素的屬性是column,on-delete,property-refnot-null,updateunique。

<key  
    column="columnname"  
    on-delete="noaction|cascade"  
    not-null="true|false"  
    property-ref="propertyName"  
    update="true|false"  
    unique="true|false"  
/>

索引集合

集合元素可以分為兩種形式:

  • 索引,和
  • 非索引

ListMap集合都可被索引,而集合和行集合是非索引的。 這里,索引收集 ListMap需要一個(gè)額外的元素<index>。

集合元素

集合元素可以具有值或?qū)嶓w引用(另一個(gè)類對(duì)象)??梢允褂?code>4個(gè)元素之一。

  • element
  • component-element
  • one-to-many, 或
  • many-to-many

elementcomponent-element 用于正常值,例如string,int等,而一對(duì)多和多對(duì)多用于映射實(shí)體引用。

在接下來(lái)的文章,我們將學(xué)習(xí)集合映射。

映射列表(List)
在這個(gè)例子中,我們將映射List元素。

映射Bag
在這個(gè)例子中,我們將使用Hibernate框架的包集合。

映射集合(Set)
在這里,我們將映射Set的集合元素。