Пакетное обновление HQL NHibernate завершается с исключением «указанный метод не поддерживается» - PullRequest
0 голосов
/ 03 марта 2011

При попытке выполнить пакетное обновление HQL для объекта Order я получаю следующее исключение:

   Specified method is not supported.
   at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.GetClassName(IASTNode querySource)
   at NHibernate.Hql.Ast.ANTLR.PolymorphicQuerySourceDetector.Process(IASTNode tree)
   at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process()
   at NHibernate.Hql.Ast.ANTLR.AstPolymorphicProcessor.Process(IASTNode ast, ISessionFactoryImplementor factory)
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(IASTNode ast, String queryIdentifier, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
   at NHibernate.Hql.Ast.ANTLR.ASTQueryTranslatorFactory.CreateQueryTranslators(String queryString, String collectionRole, Boolean shallow, IDictionary`2 filters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.HQLStringQueryPlan.CreateTranslators(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, String collectionRole, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.HQLStringQueryPlan..ctor(String hql, Boolean shallow, IDictionary`2 enabledFilters, ISessionFactoryImplementor factory)
   at NHibernate.Engine.Query.QueryPlanCache.GetHQLQueryPlan(String queryString, Boolean shallow, IDictionary`2 enabledFilters)
   at NHibernate.Impl.AbstractSessionImpl.GetHQLQueryPlan(String query, Boolean shallow)
   at NHibernate.Impl.AbstractSessionImpl.CreateQuery(String queryString)
   at ...Repositories.OrderRepository.MarkAsConfirmed(IEnumerable`1 orderIds) in C:\Users\Miroslav\Documents\Projects\...\OrderRepository.cs:line 40
   at ConfirmationUploadTask.Execute()

Обратите внимание, что сущность Order сопоставлена ​​с таблицей Orders , поэтому в не должно быть никаких проблем, связанных с зарезервированным ключевым словом. Другие запросы на основе LINQ 2 NHibernate работают правильно. При использовании некоторого другого сопоставленного объекта вместо Порядка запрос работает.

Я также пытался с hbm2ddl.keywords=auto-quote , как упомянул Фабио , но безуспешно.

Для справки, вот как выглядит запрос:

var query = GetSession().CreateQuery(
    "update Order set IsConfirmed = :isConfirmed where id in (:ids)");

При использовании CreateSQLQuery он работает без ошибок:

var query = GetSession().CreateSQLQuery(
    "UPDATE Orders SET IsConfirmed = :isConfirmed WHERE OrderId in (:ids)");

Есть идеи?

1 Ответ

3 голосов
/ 06 марта 2011

Я считаю, что это ошибка; пожалуйста, откройте билет на http://jira.nhforge.org

В качестве обходного пути, квалифицируйте имя сущности Order. Пример:

update MyProj.Domain.Order set IsConfirmed = :isConfirmed where id in (:ids)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...