Как определить псевдонимы таблиц для объединенных таблиц в простых SQL-запросах? - PullRequest
3 голосов
/ 18 июля 2011

У меня есть объект, который отображается с элементом <join>, подобным этому:

<class name="Entity" table="Entites">
  <id name="Id">
    <generator class="guid" />
  </id>
  <property name="SomeProperty" />
  <join table="EntityData" optional="true">
    <key column="entity_id" />
    <property name="SomeDataProperty />
  </join>
</class>

и собственный запрос SQL, который должен запрашивать эту сущность следующим образом (фактический запрос, конечно, более сложен и использует функции Oracle, недоступные в других типах запросов NHibernate):

var query = session.CreateSQLQuery(
  "select {entity.*} from Entities {entity}" +
  "left outer join EntityData data on {entity}.Id = data.entity_id"
);
query.AddEntity("entity", typeof(Entity));

Но это не работает, потому что NHibernate вводит свойства соединения с неправильным псевдонимом ("entity_1 _").

Я также пытался указать псевдоним таблицы как "{data}", но тогда NHibernate не заменяет его (все еще содержит фигурные скобки в простом SQL).

Добавление результата соединения к запросу (query.AddJoin("data", "entity.EntityData")) тоже не работает. Я отлаживал это, и NHibernate игнорирует его, потому что в какой-то момент он проверяет, является ли свойство коллекцией или сущностью (но это компонент, поэтому ни одно из условий if не выполняется).

Обходной путь - указать псевдоним соединения, как NHibernate генерирует его (в моем случае "entity_1_"), тогда все работает.

Кто-нибудь знает, как это можно решить правильно?

edit: У меня сейчас та же проблема при запросе сущности, которая сопоставлена ​​с отображением наследования. Я могу определить псевдоним для базовой сущности, но унаследованные сущности называются entity_1_, entity_2_ и т. Д.

1 Ответ

0 голосов
/ 03 августа 2011

Похоже, что это невозможно, поэтому я создал для него запрос функции: NH-2822

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...