Присоединение к классам NHibernate с общим столбцом, но без внешнего ключа - PullRequest
1 голос
/ 21 ноября 2008

У меня есть пара таблиц, которые я хочу сопоставить с классами. Таблицы выглядят так:

Asset
---------
AssetId
AssetName

Product
---------
ProductId
ProductName
AssetId

Disposal
---------
DisposalId
AssetId
DisposalDate

По сути, я хочу присоединить таблицу продукта к таблице утилизации в AssetId, чтобы в моем продукте была коллекция утилизации, объединенная активом. Я определил следующее сопоставление, но NHibernate (1.2), кажется, игнорирует ключевой столбец, определенный в сумке, и решает присоединить таблицу Product к таблице Disposal по ProductId (т.е. Product.ProductId = Disposal.AssetId). Я не уверен, является ли это ошибкой или я не определяю ее должным образом, но если у кого-то есть способ сделать это, я был бы очень признателен.

  <class name="Product" table="Product" lazy="false">
    <id name="ProductId" column="ProductId" type="int">
      <generator class="native" />
    </id>
    <property name="ProductName" column="ProductName"/>
    <bag name="Disposals" fetch="join" >
      <key column="AssetId" foreign-key="AssetId/>
      <many-to-many class="Disposal"/>
    </bag>
  </class>

Ответы [ 2 ]

1 голос
/ 21 ноября 2008

У вас есть ваши утилизации, сопоставленные с продуктами?

Ваша схема не относится только к утилизации продукта. Утилизация может относиться только к Активу, а не к Продукту.

Ваша схема говорит мне, что в активе много продуктов, а в активе много выбытия Там нет ничего, что говорит об утилизации для конкретного продукта.

0 голосов
/ 15 апреля 2009

Чистый путь:

  <class name="Product" table="Product" lazy="false">
    <id name="ProductId" column="ProductId" type="int">
      <generator class="native" />
    </id>
    <property name="ProductName" column="ProductName"/>
    <many-to-one name name="Asset" class="Asset" column="AssetId" />
  </class>

  <class name="Asset">
    <id name="AssetId" >
      <generator class="native" />
    </id>
    <property name="AssetName" />
    <bag name="Disposals">
      <key column="AssetId" />
      <many-to-many class="Disposal" />
    </bag>
  </class>

внешний ключ используется для DDL, я думаю, что это имя ограничения внешнего ключа, созданного при экспорте схемы.

Вы можете попробовать свойство-ref, не совсем уверенный, работает ли оно:

  <class name="Product" table="Product" lazy="false">
    <id name="ProductId" column="ProductId" type="int">
      <generator class="native" />
    </id>
    <property name="ProductName" column="ProductName"/>
    <property name="AssetId" />
    <bag name="Disposals" fetch="join" >
      <key column="AssetId" property-ref="AssetId/>
      <one-to-many class="Disposal"/>
    </bag>
  </class>
...