一尘不染

休眠逆属性

hibernate

我正在建立一对多的关系。所以,我有一个父母和一个孩子。级联属性设置为全部。

我想知道我们是否考虑以下代码:

Parent p = (Parent) session.load(Parent.class, pid); 
Child c = new Child("child element");
p.addChild(c);
session.flush();
  • Q1)如果父级拥有该关系,如,对于父级inverse = false,那么是否会在数据库中更新子级元素?
  • Q2)如果孩子拥有关系,如,对于父inverse = true,则是否会在数据库中更新子元素添加?
  • Q3)在是否可以看到更新的方面,谁拥有关联关系对上述代码没有影响?

非常感谢


阅读 214

收藏
2020-06-20

共1个答案

一尘不染

大小写逆=假:

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

大小写逆= true:

在这种情况下,孩子有责任自行保存更新。因此,在您的代码中,子级将保存在数据库中,而父级的外键将为null。将仅执行一个sql查询,该查询是insert子查询。要更新父级的外键,您需要手动保存子级。

Child child = new Child();
child.setParent(parent);
session.save(child);

我认为,这些案例的答案解释了您的第三个问题的答案。

希望能有所帮助。

2020-06-20