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基础知识(6)

一、Hibernate检索 1、Hibernate提供五种检索数据的方式       1)导航对象图检索方式:根据已加载的对象导航到其他对象。       Customer c = (Customer...

【Hibernate3】(6)组合映射、继承映射和集合映射

一. 组合映射 修改User有如下属性: private int id; private String username; private String password; private E...
  • scarthr
  • scarthr
  • 2016年01月08日 11:31
  • 263

hibernate进阶(6) 一对多映射

注意这里使用hibernate4.3.11的jar包 映射类型: 一对多(one-to-many) 多对一(many-to-one) 一对一(one - to -one) 多对多(many-to-m...

Hibernate——(6)延迟加载机制

一、延迟加载机制的基本原理 当访问实体对象时,并丌是立即到数据库中查找。而是在真正要使用实体对象的时候,才去数据库查询数据。 具备这样功能的方法 session.load(...) query.it...

心得6-hibernate级联之多对多单双向剖析

多对多: 学生与课程,以下主要从案例出发,由案例具体解析 单向多对多 Student.hbm.xml ...

hibernate学习笔记6--Criteria查询方式、完整小练习(开发步骤)

一、Criteria查询方式 没有sql语了,因此更加面向对象一些。 Criteria是一种比HQL更面向对象的查询方式;Criteria的创建方式:  Criteria c = s.creat...
  • Hollboy
  • Hollboy
  • 2013年05月23日 20:14
  • 1691

Hibernate6 集合映射

2008-05-26 19:0198人阅读评论(0)收藏举报 集合映射 一.映射Set     Set是一个集合接口,它的特性和数学上的集合有点类似,Set中存放的是对象的引用,继承自Col...

Hibernate 菜鸟教程 6 双向多对多

双向多对多inverse配置如果关系两边都使用默认inverse=false配置,表示关系两边都可以管理中间表的数据关系其中一边都设置inverse=true配置,表示自己放弃管理中间表关系,由对方来...
  • JE_GE
  • JE_GE
  • 2016年11月20日 19:59
  • 561

【Hibernate 6】常用的hql语句以及N+1问题

HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一、测试类 Classes类: package c...

6.Hibernate检索及抓取策略

Hibernate检索及抓取策略 fetch = FetchType.LAZY fetch = FetchType.EAGER @Fetch(FetchMode.SELECT) @Fetch(Fetc...
  • mafian
  • mafian
  • 2017年01月11日 21:58
  • 78
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hibernate基础_6
举报原因:
原因补充:

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