2009-04-28 61 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」代替用戶類型的格式。

如果我改用的ICriteria它工作正常:因爲日期使用shipment.ShipmentDate的用戶類型轉換

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

,一切工作正常。

我錯過了一些提示HQL該怎麼辦?

回答

7

我沒有時間嘗試自己,但嘗試添加SetParameter(IType)的第三個參數。 作爲參數使用NHUtils.Custom(typeof(YourIUserType))

+0

你真棒,工作!我不知道我是如何錯過的。我認爲必須有一種方法來幫助HQL弄清楚該怎麼做。 – anonymous 2009-04-30 12:05:49