您的位置:首页 > 其它

Hibernate学习笔记 2 - 关系映射配置

2011-08-07 11:44 696 查看
Hibernate学习笔记 2 - 关系映射配置
为了讲解本功能,创建了以下五张表

--角色
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>
后续会讲到基于注解的配置方式.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐