我正在浏览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"应用于类别,因此我知道类别是相反的一端。
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的答案后,我知道了此属性的有用性,但仍然感到困惑。
inverse="true"基本上意味着逆关系也映射到另一个类的类定义中。但是,真正的含义是它定义了哪一方是两个实体(父实体或子实体)的父级或关系所有者。因此,inverse="true"在Hibernate中,映射显示该类(具有XML定义的类)是关系所有者;而另一类是孩子。
如果您想了解更多有关此的信息,那么我一定会看一下这篇文章:http : //www.mkyong.com/hibernate/inverse-true- example-and-explanation/因为它很容易被误导hibernate状态下该属性的含义。