2010-02-04 3 views
1

HqlQuery 스타일 'select new ObjectToProjectOut'기능을 재현하려고합니다. 즉, 쿼리에서 반환 된 열의 목록을 가져 와서 쿼리의 열과 동일한 수의 매개 변수로 생성자를 사용하여 인스턴스화 된 ObjectToProjectOut 형식의 목록으로 반환합니다.SqlQuery를 사용하여 Hibernate 투영

이것은 '새로운 ObjectToProjectOut을 선택하십시오'가 Hql ....에서 달성 한 것과 같은 효과가 있지만 분명히 SqlQuery에서는 사용할 수 없습니다. 결과 변환을 설정하고 PassThroughResultTransformer, DistinctRootEntityResultTransformer 등을 사용하여 작동하게해야한다고 생각합니다.

누구든지 내가 사용해야하는 것을 알고 있습니까?

답변

2

확인 .... 그것이 내가 물론 .... AliasToBeanConstructorResultTransformer 찾고 있었던 것으로 보인다 NHibernate에 코드를보고 후!

그러나 nHibernate 버그를 발견했을 수 있습니다. 두 개의 서로 다른 테이블 (market.name과 account.name)에서 동일한 열 이름을 두 번 반환하면 nHibernate가 db에서 변형기로 배열을 반환 할 때까지 'Name'의 첫 번째 출현이 양자 모두. 추잡한.

해결 방법은 고유 한 별칭입니다. Hql을 사용하면 생성 된 sql의 별명이 많이 지정되므로 SqlQuery의 버그 일뿐입니다.

Grrrr. 오늘은 반드시 오늘이되어야합니다. another nHibernate bug/issue I've posted to StackOverflow for comment.

1

AddEntity 메서드를 사용하여 SQL 쿼리에서 엔터티를 채울 수 있습니다.

다음은 NHibernate docs에서 두 가지 예 :

sess.CreateSQLQuery("SELECT * FROM CATS") 
    .AddEntity(typeof(Cat)); 

sess.CreateSQLQuery("SELECT ID, NAME, BIRTHDATE FROM CATS") 
    .AddEntity(typeof(Cat)); 
+0

아니요, 그들은 실체가 아니며, 그것은 예측입니다. – penderi