【问题标题】:Hibernate Inverse attribute休眠反向属性
【发布时间】:2011-06-21 10:33:35
【问题描述】:

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

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

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) 谁拥有relationahsip 对上述代码是否会看到更新没有影响?

非常感谢

【问题讨论】:

    标签: hibernate inverse


    【解决方案1】:

    大小写反转 = 假:

    在这种情况下,保存更新孩子及其关系是父母的责任。所以在你的例子中,孩子将在数据库中更新。将有两个 sql 查询:1)插入子。 2)用父ID的外键更新子。

    大小写反转 = true:

    在这种情况下,自己保存更新是孩子的责任。因此,在您的代码中,子项将保存在数据库中,但父项的外键将为空。只会执行一个 sql 查询,即插入子查询。更新父外键需要手动保存子键。

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

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

    希望对您有所帮助。

    【讨论】:

    • 不完全是。级联独立于逆。如您所说,父FK将为null,但您只需设置与父的关系,无需save
    • @Stefan:感谢您的意见!所以,在我的代码中,如果孩子负责关系,那么当我执行 p.addChild(child) 时,孩子将被保存在数据库中,但外键将为空。然后我将不得不编写语句: child.setParent(parent) 来设置外键。对吗?
    • 所以不需要添加 session.save(child),因为级联已经处理好了
    • 对吗?我的意思是没有必要添加 sessin.save(child)
    • @Stefan,你说的很对。不需要单独保存子。但是如果父有子的List(not Set),那么子表中会有一个索引列用于跟踪子索引。如果 inverse=true 并且我们没有单独保存子表,那么该列将在子表中保持为空。所以,下次当你从父级获取子级列表时,它会抛出一个异常,说 null index column for collection。在这种情况下我是对的吗?
    【解决方案2】:

    Inverse 只是告诉 NH 外键被映射了两次,通常是一对多和多对一,因此只需要从一侧存储。

    Q1) 子级通过级联存储,但父级FK为空。 (除非你在p.addChild(c)内的child中设置了父关系。)

    Q2) 与 Q1 相同。

    Q3) 完全正确。

    【讨论】:

      【解决方案3】:

      如果我们使用 inverse=true,意味着孩子负责更新关系。强制子对象应包含父对象,否则不更新外键。

      【讨论】:

        【解决方案4】:

        在两个不同实体之间的父子关系中,

        例如一对多(1:N)或多对一(N:1)

        父子。 (所有者)(反向)

        如果父级是所有者,则子级是它的逆。

        使用逆总是检查孩子。

        默认情况下,我们总是从父方考虑。所以默认情况下 inverse = false 意味着父母是所有者。

        如果 inverse=true 那么孩子就是所有者。因此,实体的持久化将始终从所有者方面获取。

        【讨论】:

          猜你喜欢
          • 2023-04-09
          • 1970-01-01
          • 1970-01-01
          • 2011-06-12
          • 1970-01-01
          • 2011-08-08
          • 2013-01-07
          • 1970-01-01
          • 2010-09-20
          相关资源
          最近更新 更多