使用hibernate的一个问题

you.cai 03-08-05

使用集合时,发现一个inverse 属性,看了文档
inverse (optional - defaults to false) mark this collection as the "inverse" end of a bidirectional association。
字面理解标记此集合作为双向关联的反转端。
没有理解其含义,谁能解释解释含义和作用?
谢谢。

yehs220
2003-08-05 15:15

仅仅改变inverse端,是不会导致persistence的,
要保证两端同时改变,如
user.getGroups().add(group);
group.getUsers().add(user);
或者
parent.getChildren().add(child);
child.setParent(parent);

you.cai
2003-08-06 16:40

十分感谢。
自己测试和文档中的一些零散说明,猜测出,设为true时,必须两端都更新才会导致持久化的变化。
但是没有看见文档的正式解释:(,不敢断言。

newpaul
2003-08-06 18:37

那为何要有这样的设置呢 默认为false。 parent改变了之后 children也改变 还省得自己在children中改变 那不更好?不懂

yehs220
2003-08-06 20:39

如果这样设置的话,添加一个child时就需要两条sql语句,一条insert语句插入child的数据,一条update语句更新child的外键,这样一来效率低,二来如果child的外键有一个not null约束的话,就会违反这个约束。
而设置many端为inverse=true,而one端为inverse=false,就只需要一条
insert语句,插入child的数据和外键。