Как я могу запустить несколько вставок с NHibernate за один раз? - PullRequest
0 голосов
/ 12 ноября 2010

Я пытаюсь найти наиболее эффективный способ запуска нескольких (> 1000) операторов вставки с помощью NHibernate.

Фактическая инструкция вставки очень проста, поскольку она использует идентификатор FK из вновь созданного объекта вместе сзначения из подзапроса.Вот что я написал бы в 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_size ( NHibernate: вставка нескольких элементов одновременно ), который можно установить вXML-файл "hibernate-configuration", но создается впечатление, что он просто создаст то же число операторов insert, что и объектов.

Существует ли способ выполнить вставку за один раз, без итерациикаждый элемент?

Если так, это как-то отрицательно влияет на кеш?

1 Ответ

1 голос
/ 12 ноября 2010

adonet.batch_size работает, пока:

  • Вы используете поддерживаемую БД (SQL Server, не уверен насчет Oracle)
  • Вы используете поддерживаемый генератор (например, идентификация не работает)
  • Вы не делаете ничего "странного" со своими сущностями.

В любом случае, похоже, что вы пытаетесь выполнить массовую вставку, которая совершенно не связана.

Это можно сделать с помощью операций в стиле DML в HQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...