NHibernate: HQL и UserTypes в качестве параметров запроса - PullRequest
4 голосов
/ 28 апреля 2009

Я использую базу данных, которая имеет странный формат даты. Я написал UserType для переноса стандартного .NET DateTime в / из странного формата, и он отлично работает.

Я обычно использовал запросы ICriteria, но решил попробовать IQuery с использованием HQL в этом проекте. Я столкнулся с проблемой, что запрос не переводит параметры в соответствующий тип пользователя.

например:

IQuery query = session.CreateQuery("from OfflineShipmentLineItem as line join fetch line.Shipment as shipment join fetch line.Extension where shipment.ShipmentDate = :date");
query.SetParameter("date", date);

return query.List<OfflineShipmentLineItem>();

Вышеуказанное срывается из-за того, что запрос на shipment.ShipmentDate заканчивается «28.04.2009 12:00:00» вместо формата UserType.

Если я вместо этого использую ICriteria, он работает нормально:

ICriteria criteria = session.CreateCriteria(typeof(OfflineShipmentLineItem));

criteria.SetFetchMode("Shipment", FetchMode.Eager);
criteria.SetFetchMode("Extension", FetchMode.Eager);

criteria.CreateAlias("Shipment", "shipment");

criteria.Add(Expression.Eq("shipment.ShipmentDate", date));

return criteria.List<OfflineShipmentLineItem>();

Все работает нормально, потому что дата переведена с использованием UserType для отгрузки.ShipmentDate.

Я что-то упускаю, чтобы намекнуть на HQL, что делать?

1 Ответ

7 голосов
/ 30 апреля 2009

У меня нет времени, чтобы попробовать себя, но попробуйте добавить также 3-й аргумент SetParameter (IType). В качестве параметра используйте NHUtils.Custom (typeof (YourIUserType))

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