ddf168913
2009-10-02 17:53 阅读 228

one-to-many设置 inverse="true",我的理解很模糊

[code="java"]set inverse="true" access="field" name="children">


[code="java"][/code]

public class Organization {

。。。

/**
 * @hibernate.many-to-one
 *      column="pid"
 */
private Organization parent;

/**
 * @hibernate.set inverse="true"
 * @hibernate.key column="pid"
 * @hibernate.one-to-many class="com.darren.oa.model.Organization"
 */
private Set children;[/code]

inverse=”true“是将关联关系交给对方维护,这种关系式怎样维护的呢?

通过一个例子说明的我的困惑吧

[code="java"]Organization org = new Organization();
org.setId(1);
org.setName("总公司");
org.setDescription("总公司descUpdate");

    orgManager.updateOrg(org, 0);[/code]

如果设置inverse="false",所有孩子的pid都给干掉了

[code="java"]Hibernate: update t_organization set name=?, sn=?, description=?, pid=? where id=?
Hibernate: update t_organization set pid=null where pid=?[/code]

设置inverse="true",则让人比较喜欢,只更新自己属性,孩子依然存在
[code="java"]Hibernate: update t_organization set name=?, sn=?, description=?, pid=? where id=?[/code]

我知道设置inverse="true"好处,除了上面外,还能防止发出多余的update,
可是我不是很理解,那位给说说

[b]问题补充:[/b]
[quote]
http://blog.csdn.net/leader_lx/archive/2008/08/06/2774137.aspx
[/quote]

Hibernate仅仅按照主控方对象的状态的变化来同步更新数据库。按照原来的映射文件,people.getAddresses().add(address),即主控方对象的状态发生了改变,因此数据库会跟着对象状态的变化来同步更新数据库;
{set name="children" lazy="true" inverse="true"}

此处关联关系交给多的一方维护
主控方不是address吗?
能给我解释下主控方对象和被控方对象吗?我有点迷糊了
谢谢

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

3条回答 默认 最新

  • blacksound blacksound 2009-10-10 15:54
    点赞 评论 复制链接分享
  • blacksound blacksound 2009-10-10 15:57

    那篇文章以下那段话是不对的,只要配置正确双线关系就没问题

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

    点赞 评论 复制链接分享
  • wanghaolovezlq wanghaolovezlq 2009-10-12 20:38
    点赞 评论 复制链接分享

相关推荐