hibernate 之inverse重点复习
2008-09-03 23:06
316 查看
inverse的原因,在于单向的一对多的低效而造成的.举个例子,比如
user表和books表,一个用户假定可以有很多书,行成一对多的关系.
1) 如果是单向的一对多,比如
在user.hbm.xml中
有<set name="books" table="books" ....>
<key column="user_id"> </key>
<one-to-many class="books"/>
而在book的新增的行为中
Book book=new Book();
//更改book
user.getBookss().add(book);
session.save(user);
这个时候,由于是单向关联,所以被关联的book在新增时不知道要与哪个user对象关联,SQL语句其实为:
insert into book (....) values (?,..........)
然后再update book set userid='1',.......................
这样如果book表的userid关联自段为not null的话就会出错.
当然,如果把userid从book.hbm.xml中去掉的话,则hibernate 会产生两条语句
insert into book (xxxxx) values (xxx....)
//插入后假设id=7
update book set userid=1 where id=7
这样很低效率了.
2 因此.在一的一方user.hbm.xml中,设置控制反转,inverse=true,表示有多的一方进行控制
,这样就可以主动获得关联的user对象了.
这时,book端的代码为
Book book=new Book();
//更改book的属性等.
book.setUser(user);
user.getBooks().add(book);
session.save(user);
user表和books表,一个用户假定可以有很多书,行成一对多的关系.
1) 如果是单向的一对多,比如
在user.hbm.xml中
有<set name="books" table="books" ....>
<key column="user_id"> </key>
<one-to-many class="books"/>
而在book的新增的行为中
Book book=new Book();
//更改book
user.getBookss().add(book);
session.save(user);
这个时候,由于是单向关联,所以被关联的book在新增时不知道要与哪个user对象关联,SQL语句其实为:
insert into book (....) values (?,..........)
然后再update book set userid='1',.......................
这样如果book表的userid关联自段为not null的话就会出错.
当然,如果把userid从book.hbm.xml中去掉的话,则hibernate 会产生两条语句
insert into book (xxxxx) values (xxx....)
//插入后假设id=7
update book set userid=1 where id=7
这样很低效率了.
2 因此.在一的一方user.hbm.xml中,设置控制反转,inverse=true,表示有多的一方进行控制
,这样就可以主动获得关联的user对象了.
这时,book端的代码为
Book book=new Book();
//更改book的属性等.
book.setUser(user);
user.getBooks().add(book);
session.save(user);
相关文章推荐
- hibernate 之inverse重点复习
- hibernate 之inverse重点复习
- 重点学习 Hibernate fetch lazy cascade inverse 关键字
- hibernate的inverse和cascade属性
- 一口一口吃掉Hibernate(八)——Hibernate中inverse的用法
- hibernate集合映射inverse和cascade详解
- Hibernate 的 Inverse 和 cascade
- Hibernate中的Inverse和cascade属性配置
- 面试复习重点——数据结构、操作系统、计算机网络、数据库。
- Hibernate【inverse和cascade属性】知识要点
- hibernate inverse
- SSH框架之Hibernate的inverse属性、cascade级联操作
- hibernate集合映射inverse和cascade详解
- Hibernate之中inverse与cascade的异同
- hibernate集合映射inverse和cascade详解
- hibernate 之《lazy》延迟加载和inverse
- hibernate集合映射inverse和cascade详解
- Hibernate第五篇【inverse、cascade属性详解】
- hibernate集合映射inverse和cascade详解
- 彻底明白Hibernate中的Inverse