Объем JPA/Hibernate (пакетная) вставка

Вот простой пример, который я создал после чтения нескольких тем о jpa объеме, вставляет, у меня есть 2 Пользователя постоянных объектов и Сайт. У одного пользователя могли быть многие сайт, таким образом, у нас есть тот ко многим отношениям здесь. Предположим, что я хочу создать пользователя и создать/связать несколько сайтов к учетной записи пользователя. Вот то, как код похож, полагая, что мое согласное использует объемную вставку для объектов Сайта.

User user = new User("John Doe");

user.getSites().add(new Site("google.com", user));
user.getSites().add(new Site("yahoo.com", user));

EntityTransaction tx = entityManager.getTransaction();
tx.begin();
entityManager.persist(user);
tx.commit();

Но когда я выполняю этот код (я использую, в спящем режиме как jpa поставщик реализации), я вижу после вывода sql:

Hibernate: insert into User (id, name) values (null, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()
Hibernate: insert into Site (id, url, user_id) values (null, ?, ?)
Hibernate: call identity()

Так, я имею в виду "реальную" объемную вставку не работы, или я смущен?

Вот исходный код для этого проекта в качестве примера, это - проект знатока, таким образом, Вы имеете только загрузку и выполняете установку mvn для проверки вывода.

ОБНОВЛЕННЫЙ:

После Ken Liu любезно советуют, я отключил идентификатор объекта Сайта автоматическое поколение:

    User user = new User("John Doe");
    user.getSites().add(new Site(1, "google.com", user));
    user.getSites().add(new Site(2, "yahoo.com", user));
    entityManager.setFlushMode(FlushModeType.COMMIT);
    EntityTransaction tx = entityManager.getTransaction();
    tx.begin();
    entityManager.persist(user);
    tx.commit();

Теперь у меня есть следующая строка в выводе отладки:

ОТЛАДКА: org.hibernate.jdbc. AbstractBatcher - Выполняющий пакетный размер: 2

Работает!

25
задан Joel 28 January 2011 в 12:27
поделиться

1 ответ

Если вы используете базу данных для генерации идентификаторов, Hibernate должен выполнить запрос для генерации первичного ключа для каждой сущности.

19
ответ дан 28 November 2019 в 21:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: