0

考虑下表:

Client(Id bigint, Name varchar(50))
Employee(Id bigint, Name varchar(50), ClientId bigint)

像这样映射:

<class name="Client" table="`Client`">
  <id name="Id" column="`Id`" type="long">
    <generator class="native" />
  </id>
  <property name="Name" column="`Name`" />
  <bag name="Employees" cascade="all" inverse="true" >
    <key column="`ClientId`" />
    <one-to-many class="Employee" />
  </bag>
</class>

<class name="Employee" table="`Employee`">
  <id name="Id" column="`Id`" type="long">
    <generator class="native" />
  </id>
  <property name="Name" column="`Name`" />
  <many-to-one name="Client" cascade="all" column="`ClientId`" />
</class>

如果我得到一个客户,我也会得到一个员工集合,其中 Employee.Client = Client.Id。伟大的。

现在考虑一下:

Client(Id bigint, Name varchar(50), AlternativeId int)
Employee(Id bigint, Name varchar(50), ClientId bigint, AlternativeClientId int)

我想返回一个包含员工集合的客户,其中 Employee.AlternativeClientId = Client.AlternativeId。

我假设关键节点现在将显示:

<key column="`AlternativeClientId`"/>

但除此之外,我很困惑。有一些过滤器可以应用于集合,但是第二版中的员工集可能不是第一版中员工的子集,所以我认为这不是前进的方向。我试过了,但这似乎是一个死胡同。是否有某种方法可以指定查询,但不仅限于具有 ClientId = Client.Id 的员工?

(对于“为什么”:这与不同系统对数据的不同看法有关。)

4

1 回答 1

2

我对 nhibernate 很陌生,但这听起来像是我在使用棕地数据库时遇到的问题。property-ref 属性允许引用除主键之外的列。所以在你的情况下应该是:

    <key column="AlternativeClientId" property-ref="AlternativeId"/>
于 2011-08-23T21:11:53.357 回答