小编典典

在休眠中使用反true

hibernate

我正在浏览hibernate文档,并遇到了逆属性的概念。我是Hibernate的新手,所以我很难正确理解该概念。

http://docs.jboss.org/hibernate/orm/3.3/reference/zh-
CN/html/collections.html#collections-
bidirectional

<class name="Category">
    <id name="id" column="CATEGORY_ID"/>
    ...
    <bag name="items" table="CATEGORY_ITEM">
        <key column="CATEGORY_ID"/>
        <many-to-many class="Item" column="ITEM_ID"/>
    </bag>
</class>

<class name="Item">
    <id name="id" column="ITEM_ID"/>
    ...

    <!-- inverse end -->
    <bag name="categories" table="CATEGORY_ITEM" inverse="true">
        <key column="ITEM_ID"/>
        <many-to-many class="Category" column="CATEGORY_ID"/>
    </bag>
</class>

从上面的代码中,inverse="true"应用于类别,因此我知道类别是相反的一端。

但是我发现我的理解有些矛盾:

仅对关联的反向端所做的更改不会保留。

category.getItems().add(item);   // The category now "knows" about the relationship
item.getCategories().add(category); // The item now "knows" about the relationship

session.persist(item);   // The relationship won't be saved!
session.persist(category);   // The relationship will be saved

如果类别在相反的一端,那么关系如何保存在这里?

非反面用于将内存中的表示形式保存到数据库中。

看完示例并阅读了上面的陈述后,我知道类别在非相反的一端。

请帮助我了解如何解释此inverse="true"属性。在网上搜索并查看了SO的答案后,我知道了此属性的有用性,但仍然感到困惑。


阅读 247

收藏
2020-06-20

共1个答案

小编典典

inverse="true"基本上意味着逆关系也映射到另一个类的类定义中。但是,真正的含义是它定义了哪一方是两个实体(父实体或子实体)的父级或关系所有者。因此,inverse="true"在Hibernate中,映射显示该类(具有XML定义的类)是关系所有者;而另一类是孩子。

如果您想了解更多有关此的信息,那么我一定会看一下这篇文章:http : //www.mkyong.com/hibernate/inverse-true-
example-and-explanation/因为它很容易被误导hibernate状态下该属性的含义。

2020-06-20