2010-11-12 75 views
0

我試圖找到與NHibernate運行多個(> 1000)插入語句的最有效的方式。我怎樣才能一次運行NHibernate的多個插入?

實際的插入語句非常簡單,因爲它使用來自新創建對象的FK ID和來自子查詢的值。下面是我在SQL寫:

insert into dbo.NotificationView 
select 
    1 AS IDOfNewItem, 
    U.Id AS UserID, 
    0 AS HasEdited 
from 
    [User] U 
    INNER JOIN UserSite US ON U.Id = US.UserId 
where 
    US.SiteId = 1 

我已經看到,有一個名爲參數adonet.batch_sizeNHibernate: insert multiple items at once)可以在「休眠配置」 XML文件中設置,但現在看來,這將只是創建與對象相同的語句數insert

有沒有辦法一次運行插入,而無需遍歷每個項目?

如果是這樣,這是否會以任何方式對緩存產生負面影響?

回答

1

adonet.batch_size作品,只要:

  • 您使用的是支持的數據庫(SQL服務器,而不是有關甲骨文公司的肯定)
  • 您使用的是支持生成器(例如,身份不工作)
  • 你不會對你的實體做任何「奇怪的事情」。

無論如何,它看起來像你試圖做一個批量插入,這是完全無關的。

您可以使用HQL中的DML-style operations完成該操作。

+0

adonet.batch_size適用於Oracle。我相信在2.X時間框架中增加了支持。 (我在最後一個項目中使用了它)。警告一句話...... NH 2.X中的Oracle提供程序不會生成正確的更新批量記錄消息。如果您查看日誌(或正在使用NHProf),看起來批處理不起作用,最後一次更新會執行兩次。實際上它正在工作並且日誌消息是錯誤的。這已在NH3中得到修復。 – 2010-11-12 18:17:11

+0

感謝您的回答。 – jose 2010-11-15 14:50:57