[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吗?
能给我解释下主控方对象和被控方对象吗?我有点迷糊了
谢谢