知识大全 hibernate 中inverse

Posted

篇首语:早知今日读书是,悔作从前任侠非。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 hibernate 中inverse相关的知识,希望对你有一定的参考价值。

  Inverse是hibernate双向关系中的基本概念 inverse的真正作用就是指定由哪一方来维护之间的关联关系 当一方中指定了 inverse=false (默认) 那么那一方就有责任负责之间的关联关系 说白了就是hibernate如何生成Sql来维护关联的记录

  Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库 按照原来的映射文 件 people getAddresses() add(address) 即主控方对象的状态发生了改变 因此数据库会跟着对象状态的变化来同步更新 数据库 而address setPeople(people) 即被控方对象的状态发生了改变 它是不能触发对象和数据库的同步更新的

  (实例 )

  举个最简单的一对多父子关系 那么代码就写成

  父亲中的关系映射

  set name= children lazy= true inverse= true

  key column= parent_id /

  one to many class= test Child /

  /set

  儿子中关系映射

  many to one name= parent column= parent_id not null= true /

  Parent p = new Parent()

  Child c = new Child()

  c setParent(p)   //维护父子之间关系

  p getChildren() add(c)

  session save(p)

  session flush()

  注意 many to one总是设成 inverse=false 的 而且这个属性在Mapping中是不存在的!

  这样运行的下来的结果就是

  Hibernate: insert into parent (id) values (?)

  Hibernate: insert into child (parent_id id) values (? ?)

  那么假如c setParent(p)注释掉 结果就是

  Hibernate: insert into parent (id) values (?)

  ===================================================

  (实例 )

  一个Person可以参加多个Event 一个Event有多个Person参加

  映射文件如下

  <! Person hbm xml >

  <hibernate mapping package= events >

  <class name= Person table= person >

  <id name= id column= person_id >

  <generator class= native />

  </id>

  <property name= age length= />

  <property name= firstname />

  <property name= lastname />

  <set name= events table= person_event >

  <key column= person_id />

  <many to many column= event_id class= events Event />

  </set>

  </class>

  </hibernate mapping>

  <! Event hbm xml >

  <hibernate mapping>

  <class name= events Event table= events >

  <id name= id column= event_id >

  <generator class= native />

  </id>

  <property name= date column= events_date type= timestamp />

  <property name= title column= events_title />

  <set name= participants table= person_event inverse= true >

  <key column= event_id />

  <many to many column= person_id class= events Person />

  </set>

  </class>

  </hibernate mapping>

  inverse=true的含义 由双向关联另一方维护该关联 己方不维护该关联(只能进行查询操作) 在上述代码中 由Person方维护该<many to many>关系 示例代码如下(以向Person参与的Event中加入新的Event为例)

  Session session = HibernateUtil getSessionFactory() getCurrentSession()

  session beginTransaction()

  Person p = (Person) session load(Person class personId)

  Event e = (Event) session load(Event class eventId)

  p getEvents() add(e) //执行该代码时 hibernate会向中间表 person_event中插入person_id和event_id记录 如果换成e getParticipants() add(p)的话 该代码将不会被执行 即hibernate不会向表person_event中插入记录

  session getTransaction() mit()

  要注意的一点 在双向关联的关系中 映射的column(和table)的值要一致(即要用相同的表名和列名) 不然设置为inverse= true 的这方将失去这个双向关系 而变成了一个单向关联

  二 Inverse和Cascade的比较

  Inverse:负责控制关系 默认为false 也就是关系的两端都能控制 但这样会造成一些问题 更新的时候会因为两端都控制关系 于是重复更新 一般来说有一端要设为true

  Cascade:负责控制关联对象的级联操作 包括更新 删除等 也就是说对一个对象进行更新 删除时 其它对象也受影响 比如我删除一个对象 那么跟它是多对一关系的对象也全部被删除

cha138/Article/program/Java/ky/201311/28235

相关参考

知识大全 Hibernate性能调优

Hibernate性能调优  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  inverse=?  

知识大全 Hibernate性能调优[1]

Hibernate性能调优[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  inverse=

知识大全 控制反转(Inversion of Control)介绍

控制反转(InversionofControl)介绍  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

知识大全 Hibernate中重要对象[1]

Hibernate中重要对象[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  →→Sessi

知识大全 Hibernate中重要对象[4]

Hibernate中重要对象[4]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ◆Sessin

知识大全 Hibernate中重要对象[3]

Hibernate中重要对象[3]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  ()Sessi

知识大全 Hibernate中cascade作用

Hibernate中cascade作用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  只有关系标

知识大全 Hibernate中重要对象[2]

Hibernate中重要对象[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  使用方法链编程

知识大全 Hibernate中Criteria的用法

Hibernate中Criteria的用法  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近在

知识大全 在Hibernate中Oraclesequence的使用

在Hibernate中Oraclesequence的使用  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下