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();

Но когда я запускаю этот код (я использую hibernate в качестве поставщика реализации 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()

Значит, я имею в виду «настоящая» массовая вставка не работает или я запутался?

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

ОБНОВЛЕНО:

После любезного совета Кена Лю я отключил автогенерацию идентификатора объекта сайта:

    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();

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

DEBUG: org.hibernate.jdbc.AbstractBatcher - выполнение размера пакета: 2

Оно работает!

Ответы на вопрос(3)

Ваш ответ на вопрос