2009-12-31 22 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>(); 
} 

這個偉大的工程,生產,我之後的結果,但是我想從代碼中的SQL移動到一個名爲查詢到的hbm.xml文件。所以,我的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)並檢查奇怪的unicode charachters;) – 2009-12-31 09:13:42

+0

@Ehrann - 我剛剛嘗試過,但它不起作用。我無法解決這個問題。 – Rippo 2009-12-31 09:26:19

回答

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

aha,只是看到你的編輯。我現在看到之間有區別非常感謝。 – Rippo 2009-12-31 09:44:46

+0

和所有人 我正在嘗試使用' 2011-03-08 16:42:42

0

你不需要這個嗎?

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

我的代碼沒有使用Darin的答案。但是,也會嘗試使用來回答,並回到稍後。 – Rippo 2009-12-31 10:45:29

相關問題