svsesunyuan 发表于 2013-1-29 09:16:55

hibernate 之inverse重点复习

  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);
 
<script type="text/javascript"></script>
页: [1]
查看完整版本: hibernate 之inverse重点复习