关联是有方向的,包含单向关联和双向关联。分别讨论。
本文以客户Customer和订单Order来进行讨论:一个Customer有多个Order,每个Order对应一个Customer。


Customer对象代码

public class Customer {

  private long id;
  private String name;
  private Set<Order> orders;
  ... }

Order对象代码

public class Order implements java.io.Serializable {
  private long id;
  private String orderNumber;
  private Customer customer;
  ...
}

一、建立多对一的单向关联关系
  配置文件代码

<many-to-one
  name="customer"
  column="CUSTOMER_ID"
  class="mypack.Customer"
  cascade="save-update"
  not-null="true"
  lazy="false"
/>

  属性说明

A、name:待持久化类的属性名。
B、column:设定和待映射的持久化类的属性对应的表的外键。此处为ORDERS表的外键customer_id.
C、class:设定待映射的持久化类的属性的类型。
D、cascade:级联保存和更新,详见后续说明。
E、not-null:该属性不能为空,引用临时对象也可能会报错(提供了cascade级联设置之后可以避免)
F、lazy:懒加载,后续说明。

二、映射一对多双向关联关系
  配置文件代码

<set name="orders" inverse="true" cascade="save-update" >
  <key column="CUSTOMER_ID" />
  <one-to-many class="mypack.Order" />
</set>

  属性说明

name:设定待持久化类的属性名。
cascade:级联属性设置。none\save-update\delete\all-delete-orphan
inverse:默认值为false,是否由该端维护关联关系。当值为false时维护,不想在该端维护时将其设置为true。
<key>元素:说明ORDERS表通过外键CUSTOMER_ID参照CUSTOMERS表。
<one-to-many>:说明orders集合中存放的是一组Order对象。

三、映射一对多双向自身关联关系
  另一种可能的需求类似于分类体系。
  Cat中可能有上级分类,也有下级分类,此种情况就会出现一对多双向自身关联。
  解决方案就是上面两种情况的结合。


声明:该文所有内容均来自《精通Hibernate:Java对象持久化技术详解》[孙卫琴 电子工业出版社] 一书。该文的目的仅仅作为学习笔记。若需要转载,请注明原书相关信息。

攻城狮在路上(壹) Hibernate(五)--- 映射一对多关联关系的更多相关文章

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

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

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

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

  3. 攻城狮在路上(壹) Hibernate(十七)--- Hibernate并发处理问题

    一.多个事务并发运行时的并发问题: 总结为第一类丢失更新.脏读.虚读.不可重复读.第二类丢失更新. 1.第一类丢失更新: 撤销一个事务时,把其他事务已提交的更新数据覆盖. 2.脏读: 一个事务读到另一 ...

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

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

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

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

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

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

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

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

  8. 攻城狮在路上(壹) Hibernate(十)--- 映射值类型集合

    一.映射Set(集):未排序,无重复. 实例代码: <set name="images" table="IMAGES" lazy="true&q ...

  9. 攻城狮在路上(壹) Hibernate(七)--- 通过Hibernate操纵对象(下)

    一.与触发器协同工作: 当Hibernate与数据库的触发器协同工作时,会出现以下两类问题: 1.触发器使Session缓存中的数据和数据库中的不一致: 出现此问题的原因是触发器运行在数据库内,它执行 ...

随机推荐

  1. 如何给ZenCart网站livezilla客服系统?

    大致步骤: 1 去官网下载livezilla

  2. Bloom Filter 概念和原理

    Bloom filter 是由 Howard Bloom 在 1970 年提出的二进制向量数据结构,它具有很好的空间和时间效率,被用来检测一个元素是不是集合中的一个成员.如果检测结果为是,该元素不一定 ...

  3. peewee 字段属性help_text的支持问题

    至少在__version__ = '2.6.0'的时候,给字段添加help_text的时候,在数据库的ddl语句里面是没有comment的. 看了下源码,顺藤摸瓜,最终定位到了字段(Field类)的_ ...

  4. apache2 + virtualenv +djangocms

    命令记录: cd /var/www makedir django cd django/ virtualenv env --no-site-packages source /var/www/django ...

  5. devstack两次以上重装提高成功率的方法

    1) /opt/stack/requirements/ git reset --hard 2) rm -rf /usr/local/lib/python2.7/dist-packages/*

  6. JavaScript——事件模型

    DOM事件流: DOM(文档对象模型)结构是一个树型结构,当一个HTML元素产生一个事件时,该事件会在元素结点与根节点之间按特定的顺序传播,路径所经过的节点都会收到该事件,这个传播过程可称为DOM事件 ...

  7. MySQL字符集转换引发插入乱码问题

    根据http://www.cnblogs.com/cchust/p/4601536.html进行验证测试 问题背景 在mysql上面执行一条普通的insert语句,结果报错: Incorrect st ...

  8. pdf.js使用教程

    pdf.js框架的魅力所在,为其为HTML5实现的,无需任何本地支持,而且对浏览器的兼容性也是比较好,要求只有一个:浏览器支持HTML5就好了!(不过对于低版本的IE,就只能节哀了!) 据说IE9以上 ...

  9. MAC系统下配置环境变量

    环境变量初始值 /usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin 使用export 可以设置暂时的环境变量 如果要追加PATH的话添加新的变量到文件中expor ...

  10. 【leetcode】Valid Sudoku (easy)

    题目:就是判断已有的数字是否冲突无效,若无效返回flase 有效返回true 不要求sudo可解 用了char型的数字,并且空格用‘.'来表示的. 思路:只要分别判断横向 竖向 3*3小块中的数字是否 ...