2012-04-23 124 views
1

我想執行一個HQL插入語句來插入一些參數到我映射到實體的表中。插入HQL類型的命名參數插入HQL插入

以下是我目前的工作(這將引發異常):

Insert Into Entity1 
(ForeignKey1, ForeignKey2, Date1, Date2) 

SELECT this_.ForeignKey1, 
     cast(:param1 as int) as ForeignKeyValue2, 
     cast(:param2 as DateTime) as DateValue1, 
     cast(:param3 as DateTime) as DateValue2 
FROM OtherEntity this_ 
WHERE ... 

如果我離開了2日期字段插入的作品,所以我知道我靠近。我只需要弄清楚如何讓nhibernate將日期視爲日期。

例外:

insertion type [NHibernate.Type.Int32Type] and selection type 
[NHibernate.Dialect.Function.CastFunction+LazyType] at position 1 are not compatible 
[Insert Into Entity1 
(ForeignKey1, ForeignKey2, Date1, Date2) 

SELECT this_.ForeignKey1, 
     cast(:param1 as int) as ForeignKeyValue2, 
     cast(:param2 as DateTime) as DateValue1, 
     cast(:param3 as DateTime) as DateValue2 
FROM OtherEntity this_ 
WHERE ... 

如果任何人有做這樣的事情請隨時瀏覽體驗。此外,如果您知道如何使用HQL在日期時間上施放,也會有所幫助。 DBMS是MS SQL 2008 .:

+0

SQL爲什麼投了?爲什麼不從NH呼叫中發送正確的參數類型? – 2012-04-23 22:17:09

+0

我們可以看到設置參數的代碼嗎? – Rippo 2012-04-24 07:53:54

回答

2

您絕不應該需要進行強制轉換,只需將參數設置爲正確的類型即可。

var hql = "insert into Entity1 (fkid, mydate) 
    select fkid, :date from OtherEntity"; 

session.CreateQuery(hql) 
    .setDateTime("date", DateTime.Now) 
    .ExecuteUpdate(); 
+0

嘗試這給我一個空引用異常。假設這實際上適用於你,我將嘗試更新我的nhibernate DLL,因爲我仍然在使用2.1.2。我會公佈結果。謝謝 – 2012-04-24 12:37:53

+0

請發表一個)ID和一個日期字段的數據庫結構,2)實際的異常(內部的一個) – Rippo 2012-04-24 12:40:02

+0

沒有內部異常(超級有用的權利...)。這只是一個空引用異常,當我調用session.CreateQuery(myQueryString)時會引發異常。身份證不是問題。就像我說的那樣,如果我取出日期參數,插入的工作方式就是我原來的方式。該表格中的日期字段爲空,因此我可以插入而不設置它們(是的,我確保在設置參數時傳遞實際日期)。我仍在努力獲取DLL的更新。如果我有成功的話,我會告訴你。 – 2012-04-24 12:54:40