Hibernate集合映射
可以在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
}
映射文件中的映射集合
有很多<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>
列表中使用了三个子元素:
<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
}
Answer类代码示例如下 -
package com.yiibai;
import java.util.List;
public class Answer {
private int id;
private String answer;
private String posterName;
//getters and setters
}
现在映射文件将是:
<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>
这里,列表被一对多关系映射。 在这种情况下,一个问题可以有很多答案。
key元素
key元素用于根据原始身份在连接的表中定义外键。 外键元素默认为空。 所以对于不可空的外键,需要指定not-null属性,如:
<key column="qid" not-null="true" ></key>
key元素的属性是column,on-delete,property-ref,not-null,update和unique。
<key
column="columnname"
on-delete="noaction|cascade"
not-null="true|false"
property-ref="propertyName"
update="true|false"
unique="true|false"
/>
索引集合
集合元素可以分为两种形式:
- 索引,和
- 非索引
List 和 Map集合都可被索引,而集合和行集合是非索引的。 这里,索引收集 List 和 Map需要一个额外的元素<index>。
集合元素
集合元素可以具有值或实体引用(另一个类对象)。可以使用4个元素之一。
elementcomponent-elementone-to-many, 或many-to-many
element 和 component-element 用于正常值,例如string,int等,而一对多和多对多用于映射实体引用。
在接下来的文章,我们将学习集合映射。
映射列表(List)
在这个例子中,我们将映射List元素。
映射Bag
在这个例子中,我们将使用Hibernate框架的包集合。
映射集合(Set)
在这里,我们将映射Set的集合元素。
Hibernate集合映射的更多相关文章
- hibernate集合映射inverse和cascade详解
hibernate集合映射inverse和cascade详解 1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或 ...
- Hibernate 集合映射 一对多多对一 inverse属性 + cascade级联属性 多对多 一对一 关系映射
1 . 集合映射 需求:购物商城,用户有多个地址. // javabean设计 // javabean设计 public class User { private int userId; privat ...
- hibernate集合映射inverse和cascade详解<转载>
1.到底在哪用cascade="..."? cascade属性并不是多对多关系一定要用的,有了它只是让我们在插入或删除对像时更方便一些,只要在cascade的源头上插入或是删除,所 ...
- Hibernate 集合映射
Set映射: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mappi ...
- 【抽时间 试验】hibernate集合映射inverse和cascade详解
http://www.cnblogs.com/amboyna/archive/2008/02/18/1072260.html
- Hibernate的集合映射与sort、order-by属性
[Hibernate]Hibernate的集合映射与sort.order-by属性 常用集合Set.List.Map,相信大家都很熟悉,面试中也会经常问.Set和List都继承了Collection接 ...
- Hibernate征途(七)之复合主键映射和集合映射
把这两种映射放到一起说,是因为这两种映射不像前面的复用型映射.数量和方向型映射那么分类鲜明,所以放到了这个“其他”里面. 复合主键映射 在关系模型中,复合主键和其他的主键方式没有很大区别,但是反映到对 ...
- HIbernate学习笔记(七) hibernate中的集合映射和继承映射
九. 集合映射 1. Set 2. List a) @OrderBy 注意:List与Set注解是一样的,就是把Set更改为List就可以了 private List< ...
- Hibernate的集合映射(Set、List、Array、Map、Bag)
POJOs如下: Customer类------>customer表 Order类对应---------->orders表 customer(1)<-------------- ...
随机推荐
- CSS3:图片水平垂直居中
加上这两个就行 display:-webkit-box; 显示成盒子模式 -webkit-box-align:center; 垂直居中 -webkit-box-pack:center; ...
- SONY 手提 realtek high definition audio driver
SONY 手提 realtek high definition audio driver: 官方网站下载:http://www.realtek.com.tw/downloads/downloadsVi ...
- CentOS7.x 通过mail命令发,使用465端口(smtps协议)发送邮件
#创建证书mkdir -p /root/.certs/echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CE ...
- Shell--数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方 标准 1.标准输入(stdin):代码为0,使用<或<< 2.标准输出(stdout):代码为1.,使用> ...
- http://zhidao.baidu.com/link?url=inouJq69pK4PVM2L26fvnxXfRKhJ1uKmttgVqIEqld14SEUa8JzXZfRYHS3qdltqMXBgEQycFsF8AI9DlSoH4_
http://zhidao.baidu.com/link?url=inouJq69pK4PVM2L26fvnxXfRKhJ1uKmttgVqIEqld14SEUa8JzXZfRYHS3qdltqMXB ...
- shell报错:未预期的符号***附近有语法错误
1.安装dos2unix(我的centos命令: yum install dos2unix)2.执行命令:dos2unix 文件名.sh 3.执行命令:bash -n 文件名.sh (检查语法错 ...
- Amixer 控制声音
amixer set Master XXXX 就可以直接控制主声卡属性 amixer set Master 20 #设置主声卡声音为 20 amixer set Master off #关闭主声卡(静 ...
- J2EE规范
J2EE是由SUN提出的用于简化开发企业级应用程序的一系列规范的组合,J2EE基于中间层集成的框架的方式为应用开发提供了一个统一的开发平台.基于容器管理.组件化的模型为企业建立一个高可用性,高可靠性可 ...
- 倍福TwinCAT(贝福Beckhoff)常见问题(FAQ)-可以用软件自带NC工具驱动但是程序无法让电机转动怎么办
新建一个项目,当扫描的时候务必勾选YES,使用网上最新的XML文件 如果不使用,则有些设备可能被扫描出来是无效的(图标不正常) 如果完全删除XML描述文件,可能也能扫描出来,而且可以用Twin ...
- Android平台Camera实时滤镜实现方法探讨(十)--代码地址以及简单介绍(20160118更新)
简单做了个相机和图片编辑模块,时间原因非常多功能还没有做.尚有BUG,见谅,将在以后抽时间改动 代码地址 PS:请点个Star^-^ --------------------------------- ...