可以在Hibernate中映射持久類的集合元素。 您需要從以下類型之一聲明持久類中的集合類型:
持久化類應(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í)類型。List
和 Map
是索引集合。<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
元素用于根據(jù)原始身份在連接的表中定義外鍵。 外鍵元素默認(rèn)為空。 所以對(duì)于不可空的外鍵,需要指定not-null
屬性,如:
<key column="qid" not-null="true" ></key>
key
元素的屬性是column
,on-delete
,property-ref
,not-null
,update
和unique
。
<key
column="columnname"
on-delete="noaction|cascade"
not-null="true|false"
property-ref="propertyName"
update="true|false"
unique="true|false"
/>
集合元素可以分為兩種形式:
List
和 Map
集合都可被索引,而集合和行集合是非索引的。 這里,索引收集 List
和 Map
需要一個(gè)額外的元素<index>
。
集合元素可以具有值或?qū)嶓w引用(另一個(gè)類對(duì)象)??梢允褂?code>4個(gè)元素之一。
element
component-element
one-to-many
, 或many-to-many
element
和 component-element
用于正常值,例如string
,int
等,而一對(duì)多和多對(duì)多用于映射實(shí)體引用。
在接下來(lái)的文章,我們將學(xué)習(xí)集合映射。
映射列表(List)
在這個(gè)例子中,我們將映射List
元素。
映射Bag
在這個(gè)例子中,我們將使用Hibernate框架的包集合。
映射集合(Set)
在這里,我們將映射Set的集合元素。