可以在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的集合元素。

最新文章

  1. 【noip 2004】 合并果子
  2. Windows Server 2008 R2 域控服务器运行nslookup命令默认服务器显示 UnKnown
  3. C++调用约定和名字约定
  4. CUDA2.3-原理之任意长度的矢量求和与用事件来测量性能
  5. eclipse新建maven项目(1)
  6. python学习应用笔记(一)
  7. ecshop模板修改后还原的原因
  8. 设置(TableViewController)通用框架
  9. IOS的工程目录结构和生命周期
  10. 关于我的PP0.1聊天软件(客户端)
  11. RHEL6 安装KVM
  12. Java 内存模型 JMM 浅析
  13. RSA 前段加密 java 后台解密 已调试通过
  14. MVC5 Controller构造方法获取User为空解决方法
  15. 51 Nod 1240 莫比乌斯函数
  16. Page Lifecycle API
  17. airbnb 开源reAir 工具 用法及源码解析(一)
  18. 【LOJ】#2277. 「HAOI2017」方案数
  19. (6)time&amp;datetime(时间模块)
  20. SpringBoot学习记(一)第一个SpringBoot Web服务

热门文章

  1. 连接zookeeper集群
  2. nodeJs+socket.io
  3. Docker实践4: 基于nginx对后端的weblogic负载均衡
  4. jquery如何判断元素是否被点击、属性操作、class操作
  5. 学习Struts2.3
  6. 【千纸诗书】—— PHP/MySQL二手书网站后台开发之知识点记录
  7. HDU2491 Priest John&amp;#39;s Busiest Day
  8. 基于zookeeper+leveldb搭建activemq集群--转载
  9. Windows正在使用无法停止通用卷怎么办
  10. 【Python】八大排序算法的比较