Hibernate关联映射
2012-11-07 13:12
267 查看
以简单的两个类为例:
User(int id, String name)Group(int id, String name)
没有关联关系时的关系模型:
t_user(id int pk, name varchar)
t_group(id int pk, name varchar)
一、多对一和一对多关联映射(多个用户有相同的组)
这几种关联映射后的关系模型是相同的:
t_user(id int pk, name varchar, gid int fk->t_group(id))
t_group(id int pk, name varchar)
1、多对一单向关联
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name)
?
实体模型:
bean.User(int id, String name)
bean.Group(int id, String name, Set users)
?
集合标签可以使用order-by属性指定排序:
?
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name, Set users)
?
?
?
Hibernate: insert into t_user (name, gid) values (?, ?) Hibernate: insert into t_group (name) values (?) Hibernate: update t_user set gid=? where id=?
而配置了inverse=”true”后,Hibernate仅仅输出了添加user和group的语句,并没有更新user,放弃了关系的维护:
Hibernate: insert into t_user (name, gid) values (?, ?) Hibernate: insert into t_group (name) values (?)
此时应该从user端维护关系:
?
Hibernate: insert into t_group (name) values (?) Hibernate: insert into t_user (name, gid) values (?, ?)
二、一对一关联映射(每个用户独有一个组)
依照映射方法不同,可分为主键关联映射和唯一外键关联映射。主键关联是维护两张表的主键一致,如有必要还可以在主键上再加上外键约束;唯一外键关联则类似于多对一关联,为表加入一个外键列,不过一对一关联会同时将这个外键加上唯一约束。
1、主键关联映射
主键关联生成的关系模型:
t_user(id int pk fk->t_group(id), name varchar)
t_group(id int pk, name varchar)
1.1、主键单向关联
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name)
?
?
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name, User user)
?
唯一外键关联生成的关系模型:
t_user(id int pk, name varchar, gid int fk->t_group(id))
t_group(id int pk, name varchar)
2.1、唯一外键单向关联
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name)
?
实体模型:
bean.User(int id, String name, Group group)
bean.Group(int id, String name, User user)
?
三、多对多关联映射(每个用户拥有多个组,每个组也有多个用户)
多对多关联映射关系使用中间表表示。导出关系模型时Hibernate将自动生成复合主键以及外键约束。
关系模型:
t_user(id int pk, name varchar)
t_group(id int pk, name varchar)
t_user_group(userid int fk->t_user(id), groupid int fk->t_group(id), pk(userid, groupid))
1、多对多单向关联
实体模型:
bean.User(int id, String name, Set groups)
bean.Group(int id, String name)
?
实体模型:
bean.User(int id, String name, Set groups)
bean.Group(int id, String name, Set users)
相关文章推荐
- Hibernate 关联映射 之 多对多 关联(二) 之拆分
- Hibernate(4)关联映射之多对多
- Hibernate 简单使用(五)多对多关联映射
- Hibernate高级实体关联映射之多值的实体关联(多对多关联的两种思路之二)
- Hibernate关联映射-----一对一关联
- Hibernate基础之基本映射与关联映射
- 一口一口吃掉Hibernate(四)——多对一单向关联映射
- hibernate关联映射
- Hibernate关联映射之多对一单向关联映射
- Hibernate关联映射原则
- Hibernate之一对一关联映射
- Hibernate关系映射(4)_一对一双向主键关联
- Hibernate(九)实现一对一关联映射关系
- (Hibernate进阶)Hibernate映射——多对一单向关联映射(四)
- Hibernate映射详解(四)--一对一唯一外键关联映射
- Hibernate一对多关联映射(注解)
- 【SSH快速进阶】——Hibernate一对一映射(one-to-one)——唯一外键关联
- ssh框架hibernate 2持久化对象和关系关联映射
- Hibernate之对象关系映射02一对一单向主键关联
- Hibernate学习12 -- 关联映射2 -- 一对一关联1 -- 一对一主键关联