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
    关注
    评论

报告相同问题?

悬赏问题

  • ¥100 Jenkins自动化部署—悬赏100元
  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算
  • ¥15 java如何提取出pdf里的文字?