2009-12-31 5 views
2

내 MSSQL 서버에 AllFavourite라는 SQL 뷰가 있습니다. 내 DTO 클래스에 데이터를로드하기 위해 hbm.xml 파일에 다음과 같은 내용이 있습니다.가져 오기 클래스가있는 hbm에서 명명 된 쿼리 사용

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
     namespace="Domain.Model.Entities" assembly="Domain.Model"> 
    <import class="AllFavourite"/> 
</hibernate-mapping> 

제 코드에는 다음과 같은 내용이 있습니다.

public IList<AllFavourite> GetFavourites(int userId) 
{ 
    var query = Session 
     .CreateSQLQuery("SELECT * FROM AllFavourite where UserId=:UserId") 
     .SetInt32("UserId", userId) 
     .SetResultTransformer(new AliasToBeanResultTransformer(typeof(AllFavourite))); 
    return query.List<AllFavourite>(); 
} 

이 잘 작동하고 난 후 오전 결과를, 그러나 나는 hbm.xml 파일로 명명 된 쿼리에 코드에서 SQL을 이동하고 싶습니다. 그래서 내 hbm.xml 파일은 이제이

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" 
namespace="Domain.Model.Entities" assembly="Domain.Model"> 
    <import class="AllFavourite"/> 
    <query name="GetAllFavouriteByUserId"> 
    <![CDATA[ 
    SELECT * FROM AllFavourite WHERE UserId=:UserId 
    ]]> 
    </query> 
</hibernate-mapping> 

처럼 보이는 내 코드는 지금 그러나이

public IList<AllFavourite> GetFavourites(int userId) 
{ 
    var query = Session 
     .GetNamedQuery("GetAllFavouriteByUserId") 
     .SetInt32("UserId", userId) 
     .SetResultTransformer(new AliasToBeanResultTransformer(typeof(AllFavourite))); 
    return query.List<AllFavourite>(); 
} 

처럼 보이는 내가 이것을 실행할 때 오류 얻을 : - 그래서

Parameter UserId does not exist as a named parameter in [SELECT * FROM AllFavourite WHERE UserId=:UserId]

을 내 질문에 이런 식으로 명명 된 쿼리를 사용할 수 있습니까?

+1

나에게 올바른 것 같은데을 .. . UserId (예 : uid)와 이상한 유니 코드 charachters 확인;) –

+0

@Ehrann - 방금 시도했지만 작동하지 않습니다. 나는이 일을 할 수 없다. – Rippo

답변

3

query 태그는 HQL 쿼리를 예상 :

<query name="GetAllFavouriteByUserId"> 
    <![CDATA[ 
    from AllFavourite where UserId = :UserId 
    ]]> 
</query> 

당신이 sql-query 태그를 사용해야합니다 네이티브 SQL 쿼리 작성하려는 경우

:

<sql-query name="GetAllFavouriteByUserId"> 
    <return alias="foo" class="Foo"/> 
    <![CDATA[ 
    SELECT {foo.ID} as {foo.ID}, 
      {foo}.NAME AS {foo.Name} 
    FROM sometable 
    WHERE {foo}.ID = :UserId 
    ]]> 
</sql-query> 
+0

아하, 편집을 보았습니다. 지금은 사이에 차이가 있음을 알게되었습니다. 많은 감사드립니다. – Rippo

+0

그리고 모두 나는

0

필요하지 않으십니까?

<query-param name='UserId' type='Integer'/> 
+0

내 코드는 Darin의 대답을 사용하지 않고도 작동합니다. 그러나 으로 답을 시도하고 나중에 다시 방문하십시오. – Rippo