Hibernate学习笔记 2 - 关系映射配置
2011-08-07 11:44
696 查看
Hibernate学习笔记 2 - 关系映射配置
为了讲解本功能,创建了以下五张表
Roles
private int id;
private String name;
Users
private int id;
private String name;
private Roles role;
Roles.hbm.xml
配置说明
<many-to-one name="属性名称" class="外键类" column="数据库外键"/>
在这里可以验证一下cascade属性的功能
cascade="all" 是双向
cascade="none" 是单身
以下操作:
Users u=new Users();
u.setName("李四2");
Roles r=new Roles();
r.setName("经理2");
u.setRole(r);
...
s.save(u);
s.save(r);
...
如果配置cascade="none"
运行效果:
Hibernate: insert into dbo.Users (name, roleId) values (?, ?)
Hibernate: insert into dbo.Roles (name) values (?)
Hibernate: update dbo.Users set name=?, roleId=? where id=?
会执行三行命令
前两行增加,最后一行更新关系
如果配置cascade="all"
运行效果:
Hibernate: insert into dbo.Roles (name) values (?)
Hibernate: insert into dbo.Users (name, roleId) values (?, ?)
系统会自己调整前进的顺序并自动控制外键
一对多关系(一个角色有多个用户)
Roles
private int id;
private String name;
private Set<Users> users=new HashSet<Users>();
Users
private int id;
private String name;
private int roleId;
Roles.hbm.xml
配置说明
<set name="属性" >
<key column="数据库外键"></key>
<one-to-many class="外键类"/>
</set>
多对多关系(学生和课程之间有多对多关系)
Course.java
private int id;
private String name;
CourseSel.java
private int id;
private int studid;
private int courseid;
Stud.java
private int id;
private String name;
private Set<Course> courses=new HashSet<Course>();
Course.hbm.xml
说明:
<set name="实体属性" table="关系表名">
<key column="关系表中主表的外键"></key>
<many-to-many column="关系表中从表的外键" class="外键类"></many-to-many>
</set>
后续会讲到基于注解的配置方式.
为了讲解本功能,创建了以下五张表
--角色 create table Roles ( id int identity(1,1) primary key, name varchar(20) ) go insert into Roles values ('管理员') insert into Roles values ('普通用户') go select * from Roles go --用户 create table Users ( id int identity primary key, name varchar(20), roleid int references roles(id) ) go insert into Users values ('haha',1) go select * from Users --学生 create table Stud( id int identity primary key, name varchar(20) ) go insert into Stud values ('张三') insert into Stud values ('李四') insert into Stud values ('王五') select * from stud --课程 create table Course( id int identity primary key, name varchar(20) ) go insert into course values ('J***A') insert into Course values ('C#') insert into Course values ('JSP') select * from Course --选课 create table CourseSel( id int identity primary key, studid int references Stud(id), courseid int references Course(id) ) go insert into CourseSel values (1,1) insert into CourseSel values (1,2) insert into CourseSel values (2,2) insert into CourseSel values (2,3) insert into CourseSel values (3,1) insert into CourseSel values (3,3) go多对一关系(在用户对象中保存一个角色对象)
Roles
private int id;
private String name;
Users
private int id;
private String name;
private Roles role;
Roles.hbm.xml
<class name="com.haha.manytoone.bean.Roles" table="dbo.Roles"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> </class>Users.hbm.xml配置如下:
<class name="com.haha.manytoone.bean.Users" table="dbo.Users" > <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> <many-to-one name="role" class="com.haha.manytoone.bean.Roles" column="roleId"> </many-to-one> </class><many-to-one>用于配置多对一设置
配置说明
<many-to-one name="属性名称" class="外键类" column="数据库外键"/>
在这里可以验证一下cascade属性的功能
cascade="all" 是双向
cascade="none" 是单身
以下操作:
Users u=new Users();
u.setName("李四2");
Roles r=new Roles();
r.setName("经理2");
u.setRole(r);
...
s.save(u);
s.save(r);
...
如果配置cascade="none"
运行效果:
Hibernate: insert into dbo.Users (name, roleId) values (?, ?)
Hibernate: insert into dbo.Roles (name) values (?)
Hibernate: update dbo.Users set name=?, roleId=? where id=?
会执行三行命令
前两行增加,最后一行更新关系
如果配置cascade="all"
运行效果:
Hibernate: insert into dbo.Roles (name) values (?)
Hibernate: insert into dbo.Users (name, roleId) values (?, ?)
系统会自己调整前进的顺序并自动控制外键
一对多关系(一个角色有多个用户)
Roles
private int id;
private String name;
private Set<Users> users=new HashSet<Users>();
Users
private int id;
private String name;
private int roleId;
Roles.hbm.xml
<class name="com.haha.onetomany.bean.Roles" table="dbo.Roles"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> <set name="users" > <key column="roleId"></key> <one-to-many class="com.haha.onetomany.bean.Users"/> </set> </class>Users.hbm.xml
<class name="com.haha.onetomany.bean.Users" table="dbo.Users"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> <property name="roleId" column="roleid"></property> </class><set>用于设置一对多
配置说明
<set name="属性" >
<key column="数据库外键"></key>
<one-to-many class="外键类"/>
</set>
多对多关系(学生和课程之间有多对多关系)
Course.java
private int id;
private String name;
CourseSel.java
private int id;
private int studid;
private int courseid;
Stud.java
private int id;
private String name;
private Set<Course> courses=new HashSet<Course>();
Course.hbm.xml
<class name="com.haha.manytomany.bean.Course" table="dbo.Course"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> </class>CourseSel.hbm.xml
<class name="com.haha.manytomany.bean.CourseSel" table="dbo.CourseSel"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="courseid" column="courseid"></property> <property name="studid" column="studid"></property> </class>Stud.hbm.xml
<class name="com.haha.manytomany.bean.Stud" table="dbo.Stud"> <id name="id" column="id"> <generator class="identity"></generator> </id> <property name="name" column="name"></property> <set name="courses" table="CourseSel"> <key column="studid"></key> <many-to-many column="courseid" class="com.haha.manytomany.bean.Course"></many-to-many> </set> </class><set><many-to-many>用于配置多对多关系
说明:
<set name="实体属性" table="关系表名">
<key column="关系表中主表的外键"></key>
<many-to-many column="关系表中从表的外键" class="外键类"></many-to-many>
</set>
后续会讲到基于注解的配置方式.
相关文章推荐
- Hibernate学习笔记 3 - 关系映射配置(基于注解)
- [原创]java WEB学习笔记82:Hibernate学习之路---映射 一对多关联关系,配置,CRUD方法测试及注意点
- Hibernate学习2--对象的三种状态以及映射关系的简单配置
- [原创]java WEB学习笔记85:Hibernate学习之路-- -映射 一对一关系 ,基于主键方式实现
- Hibernate学习笔记_关系映射_学生_课程_分数
- 【Hibernate学习笔记】映射聚合关系和组合关系
- Hibernate学习---第八节:继承关系的映射配置
- 【Hibernate学习笔记】映射继承关系
- hibernate3.3.2学习笔记---映射继承的关系
- Hibernate学习笔记_关系映射_其他
- 整理笔记---Hibernate的xml与Annotation配置映射关系
- Hibernate学习笔记-------继承关系映射
- Hibernate学习之 -- 使用Middlegen-Hibernate-r5创建oracle10g的table的hibernate映射文件,Hibernate学习笔记三 ---持久化类和关系数据
- [原创]java WEB学习笔记86:Hibernate学习之路-- -映射 n-n 关系,单向n-n,双向n-n
- SSH之hibernate学习笔记----关系映射
- Hibernate学习笔记----映射继承关系
- Hibernate学习笔记(五)----关系映射
- Hibernate框架学习之注解配置关系映射
- Hibernate学习笔记--映射配置文件详解
- [原创]java WEB学习笔记77:Hibernate学习之路---Hibernate 版本 helloword 与 解析,.环境搭建,hibernate.cfg.xml文件及参数说明,持久化类,对象-关系映射文件.hbm.xml,Hibernate API (Configuration 类,SessionFactory 接口,Session 接口,Transaction(事务))