4

奇妙な日付形式のデータベースを使用しています。標準の.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に何をすべきかを示唆する何かが欠けていますか?

4

1 に答える 1

7

自分で試す時間がありませんが、SetParameter(IType)の3番目の引数も追加してみてください。パラメータとしてNHUtils.Custom(typeof(YourIUserType))を使用します

于 2009-04-30T09:43:21.437 に答える