이상한 날짜 형식을 가진 데이터베이스를 사용하고 있습니다. 표준 .NET DateTime을 이상한 형식으로 /로부터 전송하는 UserType을 작성 했으므로 제대로 작동합니다.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에서 쿼리가 '4/28/2009 12시 0분 0초'대신 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>();
모든 것이 잘 작동합니다.
HQL에 대한 힌트를 얻지 못했습니다. 어떻게해야합니까?
정말 멋지고 효과적입니다! 내가 어떻게 그걸 놓쳤는 지 잘 모르겠다. HQL이 무엇을해야할지 파악하는 데 도움이되는 방법이 있어야한다고 생각했습니다. – anonymous
이 동작은 NH 2.1.2에서 "올바른 작업 수행"(Criteria와 같은 역할을하고 IUserType을 호출)로 변경되었지만 팁이 2.1.0에 대한 내 문제를 해결합니다 (여러 가지 이유로 인해 달라질 수 있음). 고마워! –