Внешний ключ карты NHibernate - PullRequest
3 голосов
/ 13 октября 2009

У меня есть две таблицы: Автомобиль и Марка. Они объединяются с использованием MakeId в качестве внешнего ключа в таблице Vehicle. Мой файл сопоставления выглядит примерно так

    <?xml version="1.0" encoding="utf-8" ?>
    <hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2">
      <class name="Demo.Business.Objects.Vehicle, Demo.Business.Objects" table="Vehicle" >
        <id name="VehicleId" type="int" >
          <generator class="native"  />
        </id>
        <property name="RegNumber" type="String" />
        <property name="VehicleId" type="int" />
        <property name="CustomerId" type="int" />

        <join table="Make"  fetch="join">

          <key column="MakeId" foreign-key="MakeId"/>
          <property name="Description"  type="String"  />
        </join>
      </class>
    </hibernate-mapping>

Я бы подумал, что это объединит две таблицы в идентификаторе make, однако SQL, сгенерированный ios, пытается выполнить следующее соединение: vehicle.vehicleid = make.makeid.

Как мне заставить это работать? То есть Я ожидаю:

    select * from Vehicle
    inner join Make on Make.MakeId = Vehicle.Make Id

1 Ответ

0 голосов
/ 13 октября 2009

Вам нужно сопоставить класс Make по-другому:

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping  xmlns="urn:nhibernate-mapping-2.2">
  <class name="Demo.Business.Objects.Vehicle, Demo.Business.Objects" table="Vehicle" >
    <id name="VehicleId" type="int" >
      <generator class="native"  />
    </id>
    <property name="RegNumber" type="String" />
    <property name="VehicleId" type="int" />
    <property name="CustomerId" type="int" />
    <many-to-one name="Make" column="MakeId"/>
  </class>
  <class name="(blahblah).Make, blahblah">
    <id name="MakeId" type="int">
      <generator class="native" />
    </id>

    <property name="Description"  type="String"  />
  </class>
</hibernate-mapping>

Ваш класс "Vehicle" должен иметь свойство Make типа Make.

...