2

根据 nHibernate 分析器,我需要将 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>
4

3 回答 3

5

在大多数情况下,“反向”是识别关系所有者。对于您的特定情况,这应该在您的ResultApplicant映射中。

您可以在此博客文章中阅读更多内容。引用/解释该文章中特别相关的陈述:

但是“inverse”关键字本身不够冗长,我建议将 [ inverse] 关键字更改为“ relationship_owner”。

简而言之,inverse="true"表示这是关系所有者,inverse="false"(默认)表示不是。

于 2012-09-19T19:31:27.140 回答
1

当我还是一个hibernate初学者时,我对决定“inverse=true”还是“inverse=false”感到困惑。

这是一个简单的理解它的方法:

示例场景:Person(one) <-> Address(many) 双向一对多关系。(一个人有多个地址。)

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; }
  .....
}

  • Person 类有“Set getAddresses()”方法
  • 地址类有“Person getPerson()”方法

如果你考虑两个类之间的关系,它可能会给出一个人有地址的想法。(Person -> Addresses) 所以,感觉就像一个人是一个所有者,一个地址是一个孩子。然后,您想认为地址是“inverse=true”,因为地址归个人所有。但是,这是不正确的。

在这里,我想提出一种思考方式。让我们看看表结构而不是类。

  • 人[身份证,姓名,...]
  • 地址[id,person_id,城市,街道,...]

Address 表中的 person_id 列是这两个表之间的关系信息。因此,Address 是关系的所有者,而 Person 是反面。“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”。

于 2016-01-23T11:18:57.993 回答
0

你可以在mkyong的What is “inverse”中找到一个解释清楚的教程。

它着重于 @mynkow 的陈述,并为您提供了一些插入和更新有关反向属性值的示例。

如果我是你,我会看一看。

于 2016-08-21T15:01:56.613 回答