可以在Hibernate中映射持久类的集合元素。 您需要从以下类型之一声明持久类中的集合类型:
- java.util.List
- java.util.Set
- java.util.SortedSet
- java.util.Map
- java.util.SortedMap
- java.util.Collection
- 或写入
org.hibernate.usertype.UserCollectionType的实现
持久化类应该像这样定义为collection元素,如下代码示例 -
package com.zaixian;
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>元素的子元素用来映射集合。 它们是<list>,<bag>,<set>和<map>。 下面来看看看如何实现上述类的列表:
<class name="com.zaixian.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>
列表中使用了三个子元素:
<key>元素用于根据Question类标识符定义该表中的外键。<index>元素用于标识类型。List和Map是索引集合。<element>用于定义集合的元素。
这是集合存储字符串对象的映射。 但是如果集合存储实体引用(另一个类对象),我们需要定义<one-to-many>或<many-to-many>元素。 现在,持久化类将如下所示:
package com.zaixian;
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.zaixian;
import java.util.List;
public class Answer {
private int id;
private String answer;
private String posterName;
//getters and setters
}
现在映射文件将是:
<class name="com.zaixian.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.zaixian.Answer" />
</list>
</class>
这里,列表被一对多关系映射。 在这种情况下,一个问题可以有很多答案。
key元素
key元素用于根据原始身份在连接的表中定义外键。 外键元素默认为空。 所以对于不可空的外键,需要指定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需要一个额外的元素<index>。
集合元素
集合元素可以具有值或实体引用(另一个类对象)。可以使用4个元素之一。
elementcomponent-elementone-to-many, 或many-to-many
element 和 component-element 用于正常值,例如string,int等,而一对多和多对多用于映射实体引用。
在接下来的文章,我们将学习集合映射。
映射列表(List)
在这个例子中,我们将映射List元素。
映射Bag
在这个例子中,我们将使用Hibernate框架的包集合。
映射集合(Set)
在这里,我们将映射Set的集合元素。
上一篇:
Hibernate每个层次类一张表(使用注释)
下一篇:
集合映射中的映射列表(使用xml文件)
