Чтобы понять проблему, вам нужно немного понять Hibernate Object Lifecycle.
Жизненный цикл объекта Hibernate состоит из следующих состояний: 1. Переходное состояние 2. Постоянное состояние 3. Отдельное состояние и т. Д.
Когда вы создаете новый объект, он находится в переходном состоянии, и Hibernate не имеетсредство обнаружения объектов, присутствующих / созданных в переходном состоянии.
Когда вы вызываете save()
saveOrUpdate()
, тогда объект переходит из переходного состояния в постоянное состояние, и теперь Hibernate начнет отслеживать все изменения, внесенные в объект (но объект еще не записан вthe db).
Так что в вашем случае, поскольку объект не находится в постоянном состоянии, hibernate не сможет его распознать и сработает (скорее всего) insert
запрос.Однако, если объект уже находился в постоянном состоянии, hibernate знал бы, что некоторые поля были изменены, и, следовательно, запускает запрос update
.
Именно поэтому вам необходимо убедиться, что объект находится в постоянном состоянии.укажите, хотите ли вы, чтобы Hibernate запускал запрос update
.