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

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 }
Java

映射文件中的映射集合

有很多<class>元素的子元素用来映射集合。 它们是<list><bag><set><map>。 下面来看看看如何实现上述类的列表:

<class name="com.yiibai.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>
XML

列表中使用了三个子元素:

  • <key>元素用于根据Question类标识符定义该表中的外键。
  • <index>元素用于标识类型。List 和 Map是索引集合。
  • <element>用于定义集合的元素。

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

package com.yiibai;  

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 }
Java

Answer类代码示例如下 -

package com.yiibai;
import java.util.List;
public class Answer {
private int id;
private String answer;
private String posterName;
//getters and setters
}
Java

现在映射文件将是:

<class name="com.yiibai.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.yiibai.Answer" />
</list> </class>
XML

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

key元素

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

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

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"
/>
XML

索引集合

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

  • 索引,和
  • 非索引

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

集合元素

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

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

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

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

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

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

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

Hibernate集合映射的更多相关文章

  1. hibernate集合映射inverse和cascade详解

    hibernate集合映射inverse和cascade详解   1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...

  2. Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射

    1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...

  3. hibernate集合映射inverse和cascade详解<转载>

    1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所 ...

  4. Hibernate 集合映射

    Set映射: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mappi ...

  5. 【抽时间 试验】hibernate集合映射inverse和cascade详解

    http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html

  6. Hibernate的集合映射与sort、order-by属性

    [Hibernate]Hibernate的集合映射与sort.order-by属性 常用集合Set.List.Map,相信大家都很熟悉,面试中也会经常问.Set和List都继承了Collection接 ...

  7. Hibernate征途(七)之复合主键映射和集合映射

    把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...

  8. HIbernate学习笔记(七) hibernate中的集合映射和继承映射

    九.       集合映射 1. Set 2. List a)        @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...

  9. Hibernate的集合映射(Set、List、Array、Map、Bag)

    POJOs如下: Customer类------>customer表   Order类对应---------->orders表  customer(1)<-------------- ...

随机推荐

  1. HTTP协议下保证登录密码不被获取最健壮方式

    原文:http://www.cnblogs.com/intsmaze/p/6009648.html HTTP协议下保证登录密码不被获取最健壮方式   说到在http协议下用户登录如何保证密码安全这个问 ...

  2. firefox dispatchevent的问题

    <!DOCTYPE html><html><head lang="en">    <meta charset="UTF-8&qu ...

  3. 渗透笔记0x00

    今天朋友在入侵织梦的网站系统,通过最新的Exp获得了织梦后台的账号和密码 账号:admin 密码:abc123456 但是,找来找去找不到后台,就让我提权试试. 我看了下:http://pxc.nci ...

  4. typeof、instanceof与isPrototypeOf()的差异与联系

    一.typeof 1.typeof的意义及作用: 我们知道ECMAScript中有5种简单(基本)数据类型:Undefined.Null.Boolean.Number.String,以及一种引用数据类 ...

  5. RequireJS全面讲解

    异步模块定义(AMD)  谈起RequireJS,你无法绕过提及JavaScript模块是什么,以及AMD是什么. JavaScript模块只是遵循SRP(Single Responsibility  ...

  6. hadoop提交作业自定义排序和分组

    现有数据如下: 3 3 3 2 3 1 2 2 2 1 1 1 要求为: 先按第一列从小到大排序,如果第一列相同,按第二列从小到大排序 如果是hadoop默认的排序方式,只能比较key,也就是第一列, ...

  7. maven项目用assembly打包可执行jar包

    该方法只可打包非spring项目的可执行jar包,spring项目可参考:http://www.cnblogs.com/guazi/p/6789679.html 1.添加maven插件: <!- ...

  8. 【Python3 爬虫】11_报错No module named 'requests'

    从网上下载了一段源码,执行过程中报错: No module named 'requests' 一看英文就明白是咋回事了~ 是由于:没有模块requests 解决方案 打开cmd,在窗口运行命令:pip ...

  9. Java之旅(2)—反射

    1.     概念 反射就是将java类中的各种成分映射成对应的java类.之前我们已经讲过了Class类,也明确了一个java类中用一个Class类的对象来表示,一个类中的组成部分有:成员变量,方法 ...

  10. vs2015+opencv-3.2.0-vc14配置

    用的VS2015免费的community社区版,功能足矣. 很早就有配置opencv249,原本觉得低版本的稳定,一直没有配成功过,测试总是报错 出现error LINK:无法打开文件“opencv_ ...