2010-06-21 8 views
6

CreateSqlQuery를 사용하여 테이블을 쿼리하고 수식 속성이 포함 된 엔티티로 변환하려고하면 다음과 같은 예외가 발생합니다.수식 속성이있는 엔티티의 CreateSqlQuery

"값이 될 수 없다 널 매개 변수 이름 :. fieldName에"처음부터

그것은 공식 매핑을 가지고 기업에 createsqlquery를 사용할 수 있습니까?

답변

7

수식에는 CreateSQLQuery을 사용할 수 있습니다.

다음은 개념 증명입니다.

<class name="Foo"> 
    <id name="Id"> 
    <generator class="hilo"/> 
    </id> 
    <property name="Data"/> 
    <property name="DataX2" formula="Data * 2"/> 
</class> 

그리고 여기에 쿼리 : 매핑 (클래스는 추측하기 어렵지 않다) 당신이 자세히 보면

var foos = session.CreateSQLQuery(
        @" 
        select Id   as {foo.Id}, 
          Data  as {foo.Data}, 
          Data + Data as {foo.Data2} 
        from Foo 
        ") 
        .AddEntity("foo", typeof(Foo)) 
        .List<Foo>(); 

, 당신은 내가 선언이 아닌 다른 공식을 사용하고 있음을 볼 수 있습니다 매핑에서. NHibernate는 모든 프로퍼티들이 질의 내에있는 한 어떤 것도 허용한다.

17.1.2. Entity queries와 다음 내용을 읽는 것이 좋습니다.

+0

귀하의 솔루션은 존재하는 실제 버그 주변 일 것으로 보인다. –

+0

@GaryB 버그가 있다고 생각되는 경우 트래커에서 문제를 열어서 부적절한 단위 테스트를 포함시켜야합니다. –

+0

충분히 정교합니다. 나는 Nhibernate와 Hibernate 이슈 추적 사이의 관계에 익숙하지 않다. 내가 Hibernate 내에서 선언되었지만 Nhibernate 내에서 분명히 선언되지 않았기 때문에 버그 인 것을 알 수 있습니다. 따라서 Nhibernate에 대해 하나라고 부르는 것은 완전히 공정하지 않습니다. 이 시점에서 별칭 솔루션에 만족하므로 Nhibernate 문제를 만드는 것이 내 관심사에서 발견되지 않습니다. –