一、映射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(十)--- 映射值类型集合的更多相关文章

  1. 攻城狮在路上(壹) Hibernate(十八)--- 管理Hibernate的缓存

    一般Session的缓存被称为Hibernate的第一级缓存,SessionFactory的外置缓存是一个可配置的缓存插件,称为Hibernate的第二级缓存.一.缓存的基本原理: 1.持久化层的缓存 ...

  2. 攻城狮在路上(壹) Hibernate(九)--- Hibernate的映射类型

    Hibernate采用映射类型作为Java类型和SQL类型的桥梁,对应type属性.分为两种:内置映射类型和客户化映射类型.一.内置映射类型: 1.Java基本类型的Hibernate映射类型: Ja ...

  3. 攻城狮在路上(壹) Hibernate(八)--- 映射Hibernate组成关系

    一.使用组成关系的原则: 在不导致数据冗余的前提下,尽可能减少数据库表的数目及表之间的外键参照关系,因为建立多个表的连接是很耗时的操作. 举例说明:Customer类中的Address属性,可以通过组 ...

  4. 攻城狮在路上(壹) Hibernate(六)--- 通过Hibernate操纵对象(上)

    一.Hibernate缓存简介: Session接口是Hibernate向应用程序提供的操纵数据接口的最主要接口,它提供了基本的保存.更新.删除和加载Java对象的方法. Session具有一个缓存, ...

  5. 攻城狮在路上(壹) Hibernate(十六)--- Hibernate声明数据库事务

    一.数据库事务的概念: 数据库的ACID特征:Atomic.Consistency.Isolation.Durability.原子性.一致性.隔离性.持久性.不同的隔离级别引发的不同问题. 事务的AC ...

  6. 攻城狮在路上(壹) Hibernate(十五)--- Hibernate的高级配置

    一.配置数据库连接池: 1.使用默认的数据库连接池: Hibernate提供了默认了数据库连接池,它的实现类为DriverManegerConnectionProvider,如果在Hibernate的 ...

  7. 攻城狮在路上(壹) Hibernate(十四)--- Hibernate的检索方式(下)

    本节介绍HQL和QBC的高级用法:各种连接查询.投影查询.报表查询.动态查询.集合过滤和子查询等.另外将归纳优化查询程序代码,从而提高查询性能的各种技巧.一.连接查询: HQL与QBC支持的各种连接类 ...

  8. 攻城狮在路上(壹) Hibernate(十二)--- Hibernate的检索策略

    本文依旧以Customer类和Order类进行说明.一.引言: Hibernate检索Customer对象时立即检索与之关联的Order对象,这种检索策略为立即检索策略.立即检索策略存在两大不足: A ...

  9. 攻城狮在路上(壹) Hibernate(十三)--- Hibernate的检索方式(上)

    Hibernate提供了以下几种检索对象的方式: A.导航对象图检索方式. B.OID检索方式.Session.get() load(); C.HQL检索方式.Query. D.QBC检索方式.Que ...

随机推荐

  1. 对xml文件的简单解析

    package com.eprobj.demo; import java.io.IOException; import javax.xml.parsers.DocumentBuilder; impor ...

  2. java.lang.ClassNotFoundException: net.sf.json.JSONArray,java.lang.NoClassDefFoundError: net/sf/json/JSONArray jetty跑项目遇到的问题

    2016-05-18 15:44:25 ERROR Dispatcher.error[user:|url:]:L38 - Dispatcher initialization failed Unable ...

  3. ubuntu安装LAMP环境

    1. LAMP 的安装 sudo apt-get install apache2 mysql-server mysql-client php5 php5-gd php5-mysql 由于LAMP大部分 ...

  4. 批量 kill mysql 中运行时间长的sql

    1.通过information_schema.processlist表中的连接信息生成需要处理掉的MySQL连接的语句临时文件,然后执行临时文件中生成的指令 mysql> select conc ...

  5. display:inline 遇上 li 无效? why?

    若制作导航栏时,使用列表li 的定义时,若想加上一个背景图 ,这时候若定义li的一个属性为:li{display:inline ; width:83px; height:30px;},则浏览器会无视后 ...

  6. Spring AOP基于配置文件的面向方法的切面

    Spring AOP基于配置文件的面向方法的切面 Spring AOP根据执行的时间点可以分为around.before和after几种方式. around为方法前后均执行 before为方法前执行 ...

  7. zju3430

    题意:给出多个加密的模式串,和多个待匹配的串,问每个串里出现了多少种模式串.加密方法是把每3bytes加密成按6bits一个对应成4个字符,对应方法题里给了. 分析:除了解密之外,基本是个赤裸裸的AC ...

  8. JStorm集群的部署

    JStorm是一个类似Hadoop MapReduce的系统,不同的是JStorm是一套基于流水线的消息处理机制,是阿里基于Storm优化的版本,和Storm一样是一个分布式实时计算的系统,从开发角度 ...

  9. cxTreeList 控件说明

    树.cxTreeList 属性: Align:布局,靠左,靠右,居中等 AlignWithMargins:带边框的布局 Anchors:停靠 (akTop上,akBottom下,akLeft左,akR ...

  10. ACM/ICPC 之 数论-斐波拉契●卢卡斯数列(HNNUOJ 11589)

    看到这个标题,貌似很高大上的样子= =,其实这个也是大家熟悉的东西,先给大家科普一下斐波拉契数列. 斐波拉契数列 又称黄金分割数列,指的是这样一个数列:0.1.1.2.3.5.8.13.21.34.… ...