1
我有一個名爲原生SQL查詢中的我的NHibernate映射文件之一,如下所示:如何將變量中的模式名稱傳遞給nHibernate的命名查詢?
<sql-query name="GetAllClients">
<return alias="clientList" class="IBeam.Core.Models.Client"/>
<![CDATA[
SELECT a.sname Name, a.scd Id
FROM :MASTER_USER.smast a,
:MASTER_USER.fa_ledmast b,
:TRAN_USER.fa_subledmast c
WHERE a.scd = c.subledcd
AND b.ledgercd = c.ledgercd
AND b.ledtypecd = 'SDR'
AND a.catflg = 'N'
group by a.scd, a.sname
order by a.sname
]]>
</sql-query>
而且我如下運行這個查詢從我的C#代碼:
var query = Repository.GetExecutingSession().GetNamedQuery("GetAllClients").SetString("MASTER_USER", "test$master").SetString("TRAN_USER", "test$tran");
var clients = query.List<Models.Client>();
,但我得到錯誤: 參數MASTER_USER不作爲查詢中的命名參數存在。 我已經使用了命名查詢並將參數傳遞給它,但從來沒有作爲模式名稱。我認爲它將整個:MASTER_USER.smast
視爲表名,並且不區分參數名稱。如何將模式名稱作爲參數傳遞給此查詢?
我發現這個Link,所以我認爲它可以做到。但我不知道如何。
謝謝jbl。我現在正在做類似的事情。我不知道Interceptor接口。我在做的是在使用'GetNamedQuery'獲得查詢後,我手動創建了另一個'IQuery',並且手動替換了模式名稱。你的實現將保持這個替換邏輯在一個地方。我現在就試試這個。 – mridula
thx。很高興幫助。請記住,這是粗略的實現(不處理模式佔位符與同名實體之間的衝突,在攔截器中未提供模式值時不處理點) – jbl
。我正在尋找修改這個實現的一點點,以便只有當查詢是一個命名查詢 - 一個在hbm文件中定義的查詢,而不是由NHibernate生成的。任何投入? – mridula