У меня есть это исключение при смене родителя для сущности (отношение @OneToMany).
Обновление родительского объекта - org.hibernate.HibernateException: идентификатор
экземпляр {Entity} был изменен с 1 на 2
Это исключение возникает и может быть воспроизведено только для службы, работающей в Kubernetes, через некоторое время. Я имею в виду, что он не воспроизводится с самого начала срока службы контейнера, и некоторое количество обновлений успешно завершено.
Метод, который выполняет обновление сущностей, выглядит следующим образом:
@Transactional
@Override
public Optional<EntityT> update(EntityT entity) {
entity.setIsConfirmed(true);
return getRepository().findById(entity.getId())
.map(entityToUpdate -> updateEntity(entity, entityToUpdate));
}
private EntityT updateEntity(EntityT entity, EntityT entityToUpdate) {
modelMapper.map(entity, entityToUpdate);
getParentRepository().ifPresent(parentRepository ->
entity.getParent().ifPresent(parentEntity ->
parentRepository.findById(parentEntity.getId()).ifPresent(entityToUpdate::setParent))
);
entityToUpdate.setVersionTs(getCurrentTime());
return getRepository().save(entityToUpdate);
}
Spring boot version - 2.1.2 Hibernate 5.3.7 также попробуйте 5.4.1 - тот же результат.
Также установите свойства jpa пружины на
spring:
jpa:
database-platform: org.hibernate.dialect.MySQL5InnoDBDialect
generate-ddl: true
hibernate:
ddl-auto: update
properties:
hibernate:
jdbc:
batch_size: 100
flushMode: "ALWAYS"
order_inserts: true
order_updates: true
Также пробовал разные образы для контейнера open-jdk8 / oracle-jdk8
Может кто-нибудь посоветовать какое-нибудь решение?
Спасибо за совет.