我们可以在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的实现
持久性类应像这样为collection元素定义。
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>用于定义集合的元素。
如果collection存储字符串对象, 则这是collection的映射。但是, 如果集合存储实体引用(另一个类对象), 则需要定义<one-to-many>或<many-to-many>元素。现在, Persistent类将如下所示:
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>
在此, 列表是通过一对多关系映射的。在这种情况下, 一个问题可能有很多答案。
了解关键要素
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"
/>
索引集合
收集元素可以分为两种形式:
- 索引
- 非索引
List和Map集合已建立索引, 而set和bag集合未建立索引。在这里, 索引集合意味着List和Map需要一个附加元素<index>。
集合元素
集合元素可以具有值或实体引用(另一个类对象)。我们可以使用4个元素之一
- 元件
- 组成元素
- 一对多, 或
- 多对多
元素和组件元素用于正常值, 例如字符串, 整数等, 而一对多和多对多用于映射实体引用。
评论前必须登录!
注册