我们可以在Hibernate中映射Persistent类的集合元素。你需要从以下类型之一声明Persistent类中的集合类型:
- java.util.List中
- java.util.Set
- java.util.SortedSet中
- java.util.Map
- java.util.SortedMap中
- java.util.Collection中
- 或编写org.hibernate.usertype.UserCollectionType的实现
package com.srcmini;
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.srcmini.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> 用于定义集合的元素。
package com.srcmini;
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}
package com.srcmini;
import java.util.List;
public class Answer {
private int id;
private String answer;
private String posterName;
//getters and setters
}
现在, 映射文件将是:
<
class name="com.srcmini.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.srcmini.Answer" />
<
/list>
<
/class>
【Hibernate中的集合映射】在此, 列表是通过一对多关系映射的。在这种情况下, 一个问题可能有很多答案。
了解关键要素
key元素用于根据原始身份在联接表中定义外键。默认情况下, 外键元素可以为空。因此, 对于不可为空的外键, 我们需要指定不可为空的属性, 例如:
<
key column="qid" not-null="true" >
<
/key>
关键元素的属性为列, 删除, 属性引用, 非空, 更新和唯一。
<
key
column="columnname"
on-delete="noaction|cascade"
not-null="true|false"
property-ref="propertyName"
update="true|false"
unique="true|false"
/>
索引集合
收集元素可以分为两种形式:
- 索引
- 非索引
集合元素
集合元素可以具有值或实体引用(另一个类对象)。我们可以使用4个元素之一
- 元件
- 组成元素
- 一对多, 或
- 多对多
推荐阅读
- Hibernate组件映射
- Hibernate中的缓存
- Hibernate双向关联
- 带有Hibernate的Web应用程序(使用XML)
- 使用xml文件的每个具体类的表
- 第一个没有IDE的Hibernate示例
- 在Eclipse中使用注解的Hibernate示例
- Hibernate教程
- 使用注解按层次结构Hibernate表