Вы должны применить разницу между методами save () и saveOrUpdate в своем коде, чтобы получить максимальную производительность:
Метод save () возвращает идентификатор, сгенерированный базой данных. С другой стороны, saveOrUpdate () может выполнять INSERT или UPDATE в зависимости от того, существует ли объект в базе данных или нет. И saveOrUpdate делает выбор сначала, чтобы определить, нужно ли ему вставлять или обновлять. Таким образом, вы должны использовать saveOrUpdate в случае запроса на обновление.
Еще одно ключевое различие между методом save () и saveOrUpdate () заключается в том, что метод save () используется, чтобы сделать переходный объект постоянным, но saveOurUpdate () может сделать переходный (новый объект) и отдельный (существующий объект) объект в постоянное состояние. Так что saveOrUpdate () часто используется для повторного присоединения отдельного объекта к сеансу.
Из сообщения Разница между save и saveOrUpdate в спящем режиме