Hibernate Inverse属性

Tim*_*oad 7 hibernate inverse

我正在建立一对多的关系.所以,我有一个父母和一个孩子.cascade属性设置为all.

我想知道,如果我们考虑以下代码:

Parent p = (Parent) session.load(Parent.class, pid); 
Child c = new Child("child element");
p.addChild(c);
session.flush();
Run Code Online (Sandbox Code Playgroud)
  • Q1)如果父级拥有关系,如同,对于父级inverse = false,则子元素添加是否会在数据库中更新?
  • Q2)如果孩子拥有这种关系,如同,对于父的inverse = true,那么子元素添加是否会在数据库中更新?
  • Q3)谁拥有relationahsip并不会对上述代码产生影响,无论是否会看到updaet?

非常感谢

nIK*_*UNJ 5

Case inverse = false:

在这种情况下,父级负责保存更新子级及其关系.因此,在您的示例中,将在数据库中更新子项.将有两个SQL查询:1)插入子.2)用父ID的外键更新子项.

Case Inverse = true:

在这种情况下,孩子有责任进行保存更新.所以在你的代码中,child将被保存在数据库中,但parent的外键将为null.只执行一个sql查询,即insert子项.要更新父级外键,您需要手动保存子级.

Child child = new Child();
child.setParent(parent);
session.save(child);
Run Code Online (Sandbox Code Playgroud)

我想,这些案例的答案解释了你的第三个问题的答案.

希望这有帮助.

  • 不完全是.级联独立于逆.正如你所说,父-FK将为null,但你只需要设置与父亲的关系,不需要`save`. (2认同)