我正在使用具有奇怪日期格式的数据库。我编写了一个 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>();
一切正常,因为日期是使用用于 shipping.ShipmentDate 的 UserType 翻译的。
我错过了一些暗示 HQL 该怎么做的东西吗?