Hibernate 专题
专题目录
您的位置:java > Hibernate 专题 > Hibernate集合映射
Hibernate集合映射
作者:--    发布时间:2019-11-20

可以在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.h3;  

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.h3.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>元素用于标识类型。listmap是索引集合。
  • <element>用于定义集合的元素。

这是集合存储字符串对象的映射。 但是如果集合存储实体引用(另一个类对象),我们需要定义<one-to-many><many-to-many>元素。 现在,持久化类将如下所示:

package com.h3;  

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.h3;  
import java.util.list;  
public class answer {  
private int id;  
private string answer;  
private string postername;  
//getters and setters  
}

现在映射文件将是:

<class name="com.h3.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.h3.answer" />  
    </list>  

</class>

这里,列表被一对多关系映射。 在这种情况下,一个问题可以有很多答案。

key元素

key元素用于根据原始身份在连接的表中定义外键。 外键元素默认为空。 所以对于不可空的外键,需要指定not-null属性,如:

<key column="qid" not-null="true" ></key>

key元素的属性是columnon-deleteproperty-refnot-nullupdateunique

<key  
    column="columnname"  
    on-delete="noaction|cascade"  
    not-null="true|false"  
    property-ref="propertyname"  
    update="true|false"  
    unique="true|false"  
/>

索引集合

集合元素可以分为两种形式:

  • 索引,和
  • 非索引

listmap集合都可被索引,而集合和行集合是非索引的。 这里,索引收集 listmap需要一个额外的元素<index>

集合元素

集合元素可以具有值或实体引用(另一个类对象)。可以使用4个元素之一。

  • element
  • component-element
  • one-to-many, 或
  • many-to-many

elementcomponent-element 用于正常值,例如stringint等,而一对多和多对多用于映射实体引用。

在接下来的文章,我们将学习集合映射。

映射列表(list)
在这个例子中,我们将映射list元素。

映射bag
在这个例子中,我们将使用hibernate框架的包集合。

映射集合(set)
在这里,我们将映射set的集合元素。


网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册