2009-04-28 8 views
4

私は奇妙な日付形式のデータベースを使用しています。私はUserTypeを標準の.NET DateTimeを奇妙なフォーマットに/から転送するよう書いています。うまくいきます。NHibernate:クエリパラメータとしてのHQLとUserTypes

私は通常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上のクエリは「2009年4月28日午前12時00分00秒」の代わりのUserType形式でなってしまうので。

私が代わりにICriteriaを使用する場合、それは正常に動作します:日付がshipment.ShipmentDateのためのUserTypeを使用して翻訳されているので

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>(); 

すべてが正常に動作します。

私は何をすべきかをヒントするために何か不足していますか?

答えて

7

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

+0

あなたは素晴らしいです!どのように私はそれを逃したか分からない。私は、HQLが何をすべきかを理解する手助けをする方法がなければならないと考えました。 – anonymous

+0

この動作は、NH 2.1.2ではCriteriaのように動作し、IUserTypeを呼び出すように変更されましたが、あなたのヒントは2.1.0(私はさまざまな理由で固まっています)のための私の問題を解決します。ありがとう! –