攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合
一、映射Set(集):未排序,无重复。
实例代码:
<set name="images" table="IMAGES" lazy="true" >
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
参数说明:
name:指定属性名。
table:指定与属性名对应的表名。
lazy:是否延迟加载。
<key>:指定IMAGES的外键。
<element>:指定和images集合中元素对应的字段为FILENAME。
二、映射Bag(包):未排序,允许重复。
Hibernate允许在持久化类中用List来模拟Bag的行为。
实例代码:
<idbag name="images" table="IMAGES" lazy="true">
<collection-id type="long" column="ID">
<generator class="increment"/>
</collection-id>
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</idbag>
参数说明:
<collection-id>:用于设置IMAGES表的ID主键。
三、映射List(列表):排序,允许重复。
应该首先在IMAGES表中定义一个POSITION字段,代表每个元素在集合中的索引位置。
实例代码:
<list name="images" table="IMAGES" lazy="true">
<key column="CUSTOMER_ID" />
<list-index column="POSITION" />
<element column="FILENAME" type="string" not-null="true"/>
</list>
参数说明:
<list-index>:用于设置哪个字段作为索引排序的依据。
四、映射Map:
实例代码:
<map name="images" table="IMAGES" lazy="true">
<key column="CUSTOMER_ID" />
<map-key column="IMAGE_NAME" type="string"/>
<element column="FILENAME" type="string" not-null="true"/>
</map>
参数说明:
<map-key>:用于设置IMAGES表中的哪个字段作为Java持久化类中Map的键。
五、对集合排序:
Hibernate对集合中的元素支持两种排序方式:
A、在数据库中排序:通过SQL语句的order by 语句实现。
B、在内存中排序:即当Hibernate把数据库中的集合数据加载到内存中后,利用Java集合的排序功能进行排序。自然排序或者客户化排序两种。
下面依次说明。
1、在数据库中对集合排序:
<set>、<idbag>和<map>元素都具有order-by属性,可以通过设置该属性完成,实现原理是在select语句中增加了order by 语句。
实例代码:
<set name="images" table="IMAGES" lazy="true" order-by="FILENAME asc">
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
2、在内存中对集合排序:
<set>和<map>元素都具有sort属性,通过设置该属性对内存中的集合对象进行排序。
实例代码:集合类型需要实现java.util.SortedSet接口。
<set name="images" table="IMAGES" lazy="true" sort="natural">
<key column="CUSTOMER_ID" />
<element column="FILENAME" type="string" not-null="true"/>
</set>
参数说明:
A、natural:说明是进行自然排序。
B、客户化排序:在 sort中指定一个实现了Comparator接口的类的全限定名即可。
六、映射组件类型集合:
实例代码:
<set name="images" table="IMAGES" lazy="true" order-by="IMAGE_NAME asc">
<key column="CUSTOMER_ID" />
<composite-element class="mypack.Image">
<parent name="customer" />
<property name="name" column="IMAGE_NAME" not-null="true" />
<property name="filename" column="FILENAME" not-null="true" />
<property name="sizeX" column="SIZEX" not-null="true" />
<property name="sizeY" column="SIZEY" not-null="true" />
</composite-element>
</set>
攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合的更多相关文章
- 攻城狮在路上(壹) Hibernate(十八)--- 管理Hibernate的缓存
一般Session的缓存被称为Hibernate的第一级缓存,SessionFactory的外置缓存是一个可配置的缓存插件,称为Hibernate的第二级缓存.一.缓存的基本原理: 1.持久化层的缓存 ...
- 攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型
Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Ja ...
- 攻城狮在路上(壹) Hibernate(八)--- 映射Hibernate组成关系
一.使用组成关系的原则: 在不导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系,因为建立多个表的连接是很耗时的操作. 举例说明:Customer类中的Address属性,可以通过组 ...
- 攻城狮在路上(壹) Hibernate(六)--- 通过Hibernate操纵对象(上)
一.Hibernate缓存简介: Session接口是Hibernate向应用程序提供的操纵数据接口的最主要接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个缓存, ...
- 攻城狮在路上(壹) Hibernate(十六)--- Hibernate声明数据库事务
一.数据库事务的概念: 数据库的ACID特征:Atomic.Consistency.Isolation.Durability.原子性.一致性.隔离性.持久性.不同的隔离级别引发的不同问题. 事务的AC ...
- 攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置
一.配置数据库连接池: 1.使用默认的数据库连接池: Hibernate提供了默认了数据库连接池,它的实现类为DriverManegerConnectionProvider,如果在Hibernate的 ...
- 攻城狮在路上(壹) Hibernate(十四)--- Hibernate的检索方式(下)
本节介绍HQL和QBC的高级用法:各种连接查询.投影查询.报表查询.动态查询.集合过滤和子查询等.另外将归纳优化查询程序代码,从而提高查询性能的各种技巧.一.连接查询: HQL与QBC支持的各种连接类 ...
- 攻城狮在路上(壹) Hibernate(十二)--- Hibernate的检索策略
本文依旧以Customer类和Order类进行说明.一.引言: Hibernate检索Customer对象时立即检索与之关联的Order对象,这种检索策略为立即检索策略.立即检索策略存在两大不足: A ...
- 攻城狮在路上(壹) Hibernate(十三)--- Hibernate的检索方式(上)
Hibernate提供了以下几种检索对象的方式: A.导航对象图检索方式. B.OID检索方式.Session.get() load(); C.HQL检索方式.Query. D.QBC检索方式.Que ...
随机推荐
- Ubuntu 16.04播放器Rhythmbox乱码解决
使用Rhythmbox进行音乐播放的时候,歌曲名称专辑歌手名称都出现乱码,查看了网上很多教程,要不就是将音频转码,要不就是修改用户环境编码配置.前一种方法对音频有改动,后一种可能无效还有可能会影响系统 ...
- IDEA 新建文件默认加入CVS
是要先add,不过可以设置创建的文件都默认 add的.修改默认值看下图:打开系统设置,找到 Version Control 设置选项: 在 When files are created 选项中选择第二 ...
- [20160730]while 条件的死循环和正常循环对比
正常循环 import java.io.*; import java.util.*; public class MyPrintStreamTest3{ public static void main( ...
- UNIX进程
UNIX进程控制的博客 http://blog.csdn.net/yang_yulei/article/details/17404021 Linux的概念与体系 http://www.cnb ...
- 【转】mysql的cardinality异常,导致索引不可用
转自:http://ourmysql.com/archives/1343 前段时间,一大早上,就收到报警,警告php-fpm进程的数量超过阈值.最终发现是一条sql没用到索引,导致执行数据库查询慢了, ...
- RecyclerView notifyDataSetChanged不起作用
一般listview设置完data后调用notifyDataSetChanged便可刷新布局界面,然而recycleview调用这个方法却没有任何反应.对于很多不熟悉recycleview的话很容易躺 ...
- Javascript 面向对象
面向对象语言的标识:类的概念. ECMAScript中没有类的概念,因此他的对象与基于类的语言中的对象有所不同. ECMA-262把对象定义为:无序属性的集合,其属性可以包含基本值.对象.函数.我们可 ...
- Spring mvc中@RequestMapping 6个基本用法小结(转载)
小结下spring mvc中的@RequestMapping的用法. 1)最基本的,方法级别上应用,例如: @RequestMapping(value="/departments" ...
- Android屏幕适配dp、px两套解决办法
"又是屏幕适配,这类文章网上不是很多了吗?" 我也很遗憾,确实又是老问题.但本文重点对网上的各种方案做一个简短的总结,和具体使用方法. 若想了解具体Android设备适配的前世因果 ...
- SQL Server order by语句学习回顾
主要学习: 1.以指定的次序返回查询结果 2.按多个字段排序 3.按字串排序 4.处理排序空值 5.根据数据项的键排序 具体实例1---以指定的次序返回查询结果 n使用ORDER BY子句可以对结果集 ...