可以在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. 可用性的维度(5E)

    可用性的维度 当我检查可用性文献时,我发现可用软件包含如用户友好.易学.可发现性.质量.有用的和阻止错误.在可用性工程中, Jakob Nielsen给出一个产品的五个属性:易学性.效率.可记忆性.容 ...

  2. iOS:iOS 的 APP 如何适应 iPhone 5s/6/6Plus 三种屏幕的尺寸?

    原文:http://www.niaogebiji.com/article-4379-1.html?utm_source=tuicool 初代iPhone 2007年,初代iPhone发布,屏幕的宽高是 ...

  3. 在eclipse上配置tomcat

    Eclipse中Tomcat的配置及简单例子 Eclipse中Tomcat的配置是很简单的一个工作,作为一名刚刚起步的编程菜鸟,我将这个配置的过程和简单的例子写下来记录,也希望能给像我怎样的新手一些帮 ...

  4. sqoop操作与使用

    sqoop只要安装到集群中的一台节点就可以了 1.上传sqoop到节点中 2.安装和配置 在添加sqoop到环境变量到/etc/profile中 将数据库连接驱动拷贝到$SQOOP_HOME/lib里 ...

  5. virtualbox 设置windows 于ubuntu虚拟机共享文件夹

    会弹出错误, .. ..还是会有错误, modprobe       -a vboxsf 之后就可以挂载成功了!!

  6. [TypeScript] Export public types from your library

    If you're a library author, it's useful to expose your public types as interfaces, to allow your con ...

  7. [转]SQL Server 性能调优(内存)

      存储引擎自调整 sql server 是如何分配内存的 32bit地址空间的限制 用户模式vas分配和virtualalloc 非boffer pool 分配内存(保留内存) VAS调整 AWE ...

  8. CASE WHEN 的用法

    Case具有两种格式.简单Case函数和Case搜索函数. 简单Case函数 CASE sex WHEN '1' THEN '男' WHEN '2' THEN '女' ELSE '其他' END   ...

  9. Qt笔记——元对象系统

    Qt元对象系统提供了对象间的通信机制:信号和槽.以及执行类形信息和动态属性系统的支持.是标注C++的一个扩展,它使得Qt可以更好的实现GUI图形用户界面编程.Qt的元对象系统不支持C++模板.虽然模板 ...

  10. WebUI中 DataGrid多层表头 的终极解决办法

    因为DataGrid控件的简单易懂,大多数做.NET程序员都喜欢用,有需要把数据显示成表格样式的地方DataGrid会是首选,但是所有的东西都会有好和不好的一面,DataGrid在给我们带来了数据显示 ...