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个回答

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

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

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐