entityManager.merge (object) сохраняет только последнюю запись из списка - PullRequest
0 голосов
/ 09 февраля 2019

У меня есть две записи в моем ArrayList<Object>, но когда я пытаюсь вставить эти записи в базу данных, в БД сохраняется только последняя запись.

Я использую данные Spring JPA entityManager.merge()метод, поскольку у меня есть собственный sequenceGenerator, который будет использоваться для сущностей.

summaryList.stream().forEach{(summary -> entityManager.merge(summary)};

При отладке я получаю две записи в summaryList, но когда я проверяю свою таблицу БД, вставляется только одна запись.

1 Ответ

0 голосов
/ 09 февраля 2019

Hibernate сначала генерирует оператор SELECT для извлечения последнего состояния базовой записи базы данных, а затем копирует состояние отсоединенного объекта на вновь выбранный управляемый объект.Таким образом, механизм грязной проверки может обнаружить любое изменение состояния и распространить его на базу данных.

В то время как для стратегий генерации IDENTITY и SEQUENCE вы можете практически использовать объединение для сохранениядля назначенного генератора это будет менее эффективно.

Вы можете решить эту проблему, добавив свойство version к вашей сущности.

@Version
private Long version;
...