2015-11-04 5 views
0

Я использую NHibernate 2.2, и я хочу сделать простое соединение над столбцами буксировки в XML-сопоставлении.NHibernate Присоединиться к нескольким столбцам

Скажем, у меня есть две таблицы:

enter image description here

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

SELECT t1.*, t2.ProductionDate 
FROM table1 
JOIN table2 t2 ON t1.Name = t2.Name AND t1.Price = t2.Price 

Как я могу сделать это в NHibernate с XML- отображение?

ответ

1

В сопоставлениях XML вы сопоставляете отношения между вашими классами. Только если ваши классы имеют такое отношение:

class Class1 
    { 
    public Class2 { get; set; } 
    } 

Вы можете сопоставить это отношение. НО это обычно должно быть связано с использованием первичных ключей. Существует также способ сопоставить другие свойства, используя property-ref, но там он становится странным, особенно если в него входят несколько столбцов.

Я сомневаюсь, что у вас есть такое отношение в ваших классах в любом случае.

Таким образом, ссылка должна быть сделана только в запросе. Это похоже на то, как вы это делаете в SQL. Обратите внимание, что «соединения» в HQL ограничены действительными отношениями (как я уже показал выше), а не произвольным сопоставлением свойств (в отличие от SQL, где нет разницы).

HQL:

select c1.*, c2.ProductionDate 
from Class1 c1, Class2 c2 
where c1.Name = c2.Name and c1.Price = c2.Price 

Это не представляется возможным критериям (за исключением использования подзапросов, но тогда вы не можете вернуться ProductionDate). Невозможно сделать это внешним соединением, кроме как вернуться к SQL.

Комментарий: Вы можете думать, что NHibernate здесь не очень помогает. Это действительно так. Причина в том, что NHibernate является ORM и позволяет реализовать бизнес-логику объектно-ориентированным способом. Вид, который вы здесь имеете, не является типичным объектно-ориентированным отношением. Это не так, как обычно вы имеете дело с классами в чистом дизайне OO.

+0

спасибо за информативный ответ! Я закончил использование запроса в xml-части. Я сделал это так, поэтому я могу изменить ссылку в моем коде на конкретный файл. Мне нужно, чтобы он оставался совместимым с различными версиями базы данных. – Franki1986