Многократный вызов метода save () hibernate с одним и тем же объектом вставляет новую запись в БД? - PullRequest
0 голосов
/ 27 февраля 2020
for(int index=0; index<10; index++) {
   Session session = hibernateTemplate.getSessionFactory().openSession();
   session.save(object);
}

Сохраняет ли этот код переданный объект в save (object) в БД 10 раз или он будет переопределен каждый раз?

Ответы [ 2 ]

2 голосов
/ 27 февраля 2020

Зависит от состояния объекта.

Если вы создаете новый объект каждый раз, новый объект находится в переходном состоянии: он не отображается в записи базы данных и не управляется каким-либо контекстом постоянства. Таким образом, вызов метода save() Hibernate создаст новую запись в базе данных.

Но если вы вызываете метод save() с управляемым объектом, который уже присоединен к текущему контексту персистентности и сопоставлен с записью базы данных : тот же объект будет обновлен.

0 голосов
/ 27 февраля 2020
 save method in hibernate:
 *Persist the given transient instance, first assigning a generated identifier. (Or
 using the current value of the identifier property if the assigned
 generator is used.) This operation cascades to associated instances if the
 association is mapped with cascade="save-update"
 Accept parameters :@param object a transient instance of a persistent class
 Return Prameters : @return the generated identifier*

Таким образом, метод save () сохраняет записи в базе данных по запросу INSERT SQL, генерирует новый идентификатор и возвращает обратно сериализуемый идентификатор. Таким образом, в вашей базе данных будет 10 объектов с разными идентификаторами

 Read more: https://javarevisited.blogspot.com/2012/09/difference-hibernate-save-vs-persist-and-saveOrUpdate.html#ixzz6F8Hiy8fF

 Hope it helps.
...