2009-04-28 5 views
4

이상한 날짜 형식을 가진 데이터베이스를 사용하고 있습니다. 표준 .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에 대한 힌트를 얻지 못했습니다. 어떻게해야합니까?

답변

7

나 자신을 시도 할 시간이 없지만 SetParameter (IType)의 세 번째 인수도 추가하려고합니다. 매개 변수로 NHUtils.Custom (typeof (YourIUserType))을 사용합니다.

+0

정말 멋지고 효과적입니다! 내가 어떻게 그걸 놓쳤는 지 잘 모르겠다. HQL이 무엇을해야할지 파악하는 데 도움이되는 방법이 있어야한다고 생각했습니다. – anonymous

+0

이 동작은 NH 2.1.2에서 "올바른 작업 수행"(Criteria와 같은 역할을하고 IUserType을 호출)로 변경되었지만 팁이 2.1.0에 대한 내 문제를 해결합니다 (여러 가지 이유로 인해 달라질 수 있음). 고마워! –