nhibernate многие ко многим, где искать это не поле id - PullRequest
1 голос
/ 02 марта 2011

Я собираюсь упростить мою проблему.Итак, давайте предположим, что у нас есть область домашних животных NHibernate, с Spot the dog, Fluffy the cat, Hunter the cat и SSSS змеей, так что в БД эти парни будут выглядеть так:

ID  Name     Species
1   Spot     1
2   Fluffy   2
3   Hunter   2
4   SSSS     3

И у нас естьтаблица видов

ID Species
1  Dog
2  Cat
3  Snake

И скажем, у нас есть таблица типа кожи с этими двумя записями

ID  Type
1   Furry
2   Scaley

И таблица поиска, которая выглядит как

Species   Type
1         1
2         1
3         2

Как мне сопоставить это так, чтобы он натягивал тип кожи с объектом.

Я смотрел на файл сопоставления, подобный этому

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="menagerie"
assembly="menagerie">
<class name="Pet" table="Pets">
    <id name="Id">
      <column name="id" />
      <generator class="native" />
    </id>
    <property name="Name" />
    <many to one name="Species"
          class="PetSpecies"
          column="Species"
          cascade="all" />
    <bag name="SkinType" table="Species_SkinType" cascade="none" lazy="false">
      <key column="Species" />
      <many-to-many class="SkinType" column="[type]" />
    </bag>
</class>
</hibernate-mapping>

Однако, сумка, котораяПредполагается, что он заполнен типом кожи домашнего животного, который хочет использовать идентификатор домашнего животного в качестве значения ключа поиска, а не его вид.Как мне заставить его использовать вид домашнего животного, чтобы заселить его тип кожи?

Ответы [ 3 ]

1 голос
/ 02 марта 2011

Возможно ли помочь атрибут foreign-key? См этот ответ

1 голос
/ 02 марта 2011

Ну, я понял это.

Сумка должна быть не в классе Pet, а в классе Species.

Так что вместо Fluffy.Skintype = furry нетявляется Fluffy.Cat.Skintype = furry.

1 голос
/ 02 марта 2011

Я бы отобразил SkinType как отношение «многие к одному» от Pet. Таблица «многие ко многим», которая связывает Species с SkinType, должна использоваться в пользовательском интерфейсе и проверке, чтобы разрешить выбор только допустимых SkinTypes для Species. Я бы не стал применять это ограничение в модели.

...