个性化阅读
专注于IT技术分析

Hibernate中的集合映射

我们可以在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个元素之一

  • 元件
  • 组成元素
  • 一对多, 或
  • 多对多

元素和组件元素用于正常值, 例如字符串, 整数等, 而一对多和多对多用于映射实体引用。


赞(0)
未经允许不得转载:srcmini » Hibernate中的集合映射

评论 抢沙发

评论前必须登录!