根据nHibernate profiler,我需要在我的映射文件中添加inverse =“true”,但是,我似乎无法找到关于确切放置此属性的位置的示例。任何人都可以根据以下映射文件告诉我我需要将inverse =“true”?
<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
auto-import="true"
namespace="LROLib.Domain"
assembly="LROLib">
<class name="TestResult" table ="Test_Results" >
<id name="Test_Result_Id" >
<generator class="native" />
</id>
<many-to-one name="Test_Result" class="Result" column="Result_Id" />
<many-to-one name="Test_Applicant" class="Applicant" column="Applicant_Id"/>
<property name="Test_Name" />
<property name="Value" />
<property name="Hi_Lo_Ind" />
<property name="Range" />
<property name="Unit_Of_Measure" />
<property name="Lo_Range" />
<property name="Hi_Range" />
<property name="Create_DateTime" update="false"/>
<property name="Update_DateTime" />
<property name="User_Name" />
</class>
</hibernate-mapping>
答案 0 :(得分:5)
在大多数情况下,“反向”是识别关系所有者。对于您的特定情况,这应该在您的Result
和Applicant
映射中。
您可以在this blog post中阅读更多内容。引用/解释该文章中特别相关的陈述:
然而,“反向”关键字本身并不够详细,我建议将[
inverse
]关键字更改为“relationship_owner
”。简而言之,
inverse="true"
表示这是关系所有者,inverse="false"
(默认)表示不是。
答案 1 :(得分:1)
当我是一名休眠初学者时,我对决定“inverse = true”或“inverse = false”感到困惑。
这是一种理解它的简单方法:
示例场景: 人(一)&lt; - &gt;地址(多) 双向一对多关系。 (一个人有多个地址。)
public class Person {
private Integer id;
private Set<Address> addresses;
// setter, getter
Set<Address> getAddresses() { return addresses; }
....
}
public class Address {
private Integer id;
private Person person;
// setter, getter
Person getPerson() { return person; }
.....
}
如果你考虑两个类之间的关系,它可能会给出一个人有地址的想法。 (人 - &gt;地址) 因此,感觉就像一个人是一个所有者,一个地址就是一个孩子。然后,您想要认为地址是“inverse = true”,因为地址是由人拥有的。 但是,这不正确。
在这里,我想建议一种思考方式。让我们看看表结构而不是类。
Address表中的person_id列是两个表之间的关系信息。 因此,地址是关系的所有者,而人是反面。 “inverse = true”表示“此侧是反面”,“inverse = false”表示“这不是反面。”此方是所有者关系“。
<class name="Person">
<id name="id">...</id>
<set name="addresses" inverse="true">
<key column="person_id"/>
<one-to-many class="Address"/>
</set>
</class>
<class name="Address">
<id name="id">...</id>
<many-to-one name="person" class="Person" />
</class>
总之,查看表结构以区分“inverse = true”或“inverse = false”。 如果表有关系信息,那么它是所有者方。所以,它不是反面的。(inverse = false) 如果表没有关系信息,那么它就是反面。所以,它需要“inverse = true”。
答案 2 :(得分:0)