hibernate基础_6

原创 2005年05月20日 12:39:00

hibernate的一对多映射可以通过几种方式实现,这里介绍通过set来实现的方法(可以参考前面的set,list,map映射)

这里,我为该映射构建两个类Room和Resident,标志代码如下:

public class Room {
    private int roomNum;
    private String address;
    private Set residents = new HashSet();
}

public class Resident {
    private int id;
    private String name;
}

通过Room中的residents,我们将在一个Room对应的表象中存储多个Resident的数据。

对应的Resident.hbm.xml很简单

<id name= "id" column= "id" unsaved-value= "0" >
       <generator class= "increment"  />
       <!-- why must be increment -->
</id>

同其他持久化类不同的是,只要声明unsaved-value就可以在Resident类中实现联级的存储。至于为什么要unsaved-value= "0" ,建议你去前面几篇基础看一下相应的解释

比较重要的是Room.hbm.xml,因为它包含了有关set映射及联级等的描述。Room.hbm.xml中重要部分如下

<set name= "residents" table= "resident" order-by= "id desc"
      cascade= "all" inverse= "false" >
      <key column= "roomNum" />
      <one-to-many class= "onetomany.Resident" />
</set>

在set的描述中,order-by= "id desc"对应了加入set中的Resident是按照id降序排列的,在Resident对应的表中可以清楚地看到。cascade= "all" 说明任何针对Room的操作都会对相应的Resident起作用。inverse= "false" 则说明了这里的联级要交给Room而不是Resident来处理。

<one-to-many class= "onetomany.Resident" />

这句是区别与set映射最大的地方。说明了对应于“多”这一项的类。

执行的时候,只要存储Room即可实现相应的联级存储

session.save(room);

看完了以上介绍,想必应该对一对多映射有了一定的初步了解。其实这个一对多的例子还不是很好,因为始终不能将“多”这一类的id改为asignment,否则会出现存储错误。如果哪位解决了,或者知道这是为什么,请恢复一下,呵呵,还请指点。

Hibernate Validator 6总结

Hibernate Validator 6
  • banxia727706033
  • banxia727706033
  • 2017年10月18日 14:09
  • 46

Hibernate基础--Hibernate(你必须要懂得基础)

01_Hibernate概述 作者: 风离紫竹--tryzq521@126.com 1.Hibernate是一款工作在持久化层的大型、开源、免费的ORM框架。 2.持久化 ...
  • u011200604
  • u011200604
  • 2016年06月17日 00:01
  • 3836

第6章深入使用Hibernate 6.5 条件查询

6.5 条件查询
  • u010819416
  • u010819416
  • 2015年10月24日 23:53
  • 378

Hibernate自学详细笔记

Hibernate详细自学笔记,初学者快来看看吧!!!!
  • wangyang1354
  • wangyang1354
  • 2015年08月31日 21:23
  • 1274

Hibernate底层技术简介 CGLIB

    从可以看到,基于ASM的开发很复杂,需要了解JVM的底层编码。CGLIB以ASM为基础, 对ASM的功能进行了扩展和封装,提供了更友好的API,部分通用的模版和高级的功能实现。CGLIB的具体...
  • nomad2
  • nomad2
  • 2007年01月21日 12:16
  • 3849

Hibernate学习笔记(十)Hibernate 高级配置

一:配置数据库连接池 反问数据库,需要不断的创建和释放连接,假如访问量大的话,效率比较低级,服务器消耗大; 使用数据库连接池,我们可以根据实际项目的情况,定义连接池的连接个数,从而可以实现从连接池...
  • z956281507
  • z956281507
  • 2017年07月05日 16:43
  • 104

Hibernate之三 调用存储过程、触发器、数据库的隔离级别

一、Hibernate调用存储过程 Work 接口: 直接通过 JDBC API 来访问数据库的操作Session 的 doWork(Work) 方法用于执行 Work 对象指定的操作, 即...
  • icanhaha
  • icanhaha
  • 2015年03月17日 11:33
  • 759

hibernate 学习笔记 马士兵

第1课 课程内容. 6 第2课Hibernate UML图. 6 第3课 风格. 7 第4课 资源. 7 第5课 环境准备. 7 第6课 第一个示例HibernateHe...
  • hebiao100
  • hebiao100
  • 2012年04月07日 15:49
  • 3599

hibernate快速入门案例

开发流程 1.创建一个项目 2.画出简单的项目框架图 3.引入hibernate开发包(http://www.hibernate.org) hibernate开发方式的三种方式: 1由Domain...
  • lightsu_1029
  • lightsu_1029
  • 2016年02月23日 21:54
  • 752

[转]STM32学习笔记6-定时器中断

转自:http://blog.csdn.net/wangxiaobupt/article/details/18461915STM32 的定时器功能十分强大。有TIME1 和 TIME8 等高级定时器,...
  • free_dom_
  • free_dom_
  • 2015年11月09日 12:45
  • 443
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate基础_6
举报原因:
原因补充:

(最多只允许输入30个字)