您的位置:首页 > 其它

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);





  

   
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: