奇妙な日付形式のデータベースを使用しています。標準の.NETDateTimeを奇妙な形式との間で転送するUserTypeを作成しましたが、正常に機能します。
私は通常ICriteriaクエリを使用しましたが、このプロジェクトでHQLを使用してIQueryを試すことにしました。クエリがパラメータを適切なUserTypeに変換しないという問題が発生しました。
例えば:
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のクエリが、UserType形式ではなく「4/28/200912:00:00」になるために発生します。
代わりに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>();
日付はshipment.ShipmentDateのUserTypeを使用して変換されるため、すべて正常に機能します。
HQLに何をすべきかを示唆する何かが欠けていますか?