Экранирование символа вопросительного знака в имени столбца в NHibernate

#nhibernate #nhibernate-mapping #hql

#nhibernate #nhibernate-сопоставление #hql

Вопрос:

У меня есть объект со свойством, имя столбца которого содержит вопросительный знак. Как мне сопоставить имя столбца, чтобы запрос HQL корректно генерировал SQL с соответствующим образом завернутым именем столбца (т. Е. [] для SQL Server) вместо замены вопросительного знака параметром? Я пытался заключить имя столбца в обратные знаки или квадратные скобки, но это не работает.

Ответ №1:

У меня обратные ссылки работают нормально. Не забывайте использовать их только в файле сопоставления, а не в HQL:

 <property name="Data1" column="`Data1?`" />
  

Этот запрос:

 session.CreateQuery("select Data1 from Foo").List();
  

Приводит к этому SQL:

 select foo0_.[Data1?] as col_0_0_
from Foo foo0_
  

Обновление: это ошибка в NHibernate 3.1. Возникла проблема с Jira

Комментарии:

1. Похоже, у меня это не работает. У меня есть это сопоставление: <subclass name="Visit"> <property name="IsFixed" column="`Fixed?`" /> </subclass> Когда я запускаю этот запрос: return _session.CreateQuery("select visit from Visit visit").List<Visit>(); я получаю этот SQL: select visit0_.[Fixed@p0] as Fixed14_22_ from dbo.tblVisits visit0_ Что приводит к SQLException Недопустимому имени столбца ‘Fixed @p0’.

2. @MartinIngham: какую версию NH вы используете? Диалект и драйвер?

3. Версия NH = 3.1.0.4000, диалект = NHibernate. Диалект. MsSql2005Dialect, driver = NHibernate. Драйвер.SqlClientDriver Сервер базы данных = MS SQL Server 2008 R2, поставщик = System.Data.SqlClient

4. @MartinIngham: вы обнаружили ошибку. Я обнаружил проблему в NH tracker (см. Редактирование)