hibernate基础_6
2005-05-20 12:39
295 查看
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,否则会出现存储错误。如果哪位解决了,或者知道这是为什么,请恢复一下,呵呵,还请指点。
这里,我为该映射构建两个类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入门 - 基础配置
- Hibernate基础学习笔记
- 构建基础的SpringMVC+Hibernate+SpringloC项目
- Hibernate(基础一) Hibernate3的动态条件查询DetachedCriteria用法
- hibernate基础知识总结2--持久化概念
- 基础图解 Hibernate
- Weblogic81和Hibernate 的集成问题-Java基础-Java-编程开发
- hibernate基础知识一
- Hibernate入门——基础详解
- 1、Hibernate基础
- 1、Hibernate基础
- 1、Hibernate基础
- hibernate的基础学习--多表关联数据查询
- Hibernate基础:快速入门(5):删除数据
- 初识hibernate——基础与核心
- spring+hibernate基础
- Hibernate基础-插入数据
- Hibernate 基础( 1 ) 基本流程
- Hibernate基础教程(4)
- Hibernate基础学习(八)—8888888