ddf168913 2009-10-02 17:53 采纳率: 100%
浏览 229

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 2009-10-10 15:54
    关注
    评论

报告相同问题?

悬赏问题

  • ¥50 汇编语言除法溢出问题
  • ¥65 C++实现删除N个数据列表共有的元素
  • ¥15 Visual Studio问题
  • ¥15 state显示变量是字符串形式,但是仍然红色,无法引用,并显示类型不匹配
  • ¥20 求一个html代码,有偿
  • ¥100 关于使用MATLAB中copularnd函数的问题
  • ¥20 在虚拟机的pycharm上
  • ¥15 jupyterthemes 设置完毕后没有效果
  • ¥15 matlab图像高斯低通滤波
  • ¥15 针对曲面部件的制孔路径规划,大家有什么思路吗