NHibernate:HQL和UserTypes作为查询参数

时间:2009-04-28 19:18:10

标签: nhibernate hql

我正在使用具有奇怪日期格式的数据库。我编写了一个UserType来将标准.NET DateTime转换为奇怪的格式,并且工作正常。

我通常使用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>();

上述情况爆发,因为对shipping.ShipmentDate的查询最终为'4/28/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 for shipment.ShipmentDate翻译的。

我是否遗漏了一些暗示HQL的内容?

1 个答案:

答案 0 :(得分:7)

我没有时间尝试自己,但尝试添加SetParameter(IType)的第三个参数。 作为参数使用NHUtils.Custom(typeof(YourIUserType))