Я пытаюсь обновить объект. В рамках этого процесса я загружаю старый из базы данных и «переношу» значения его свойств в новый объект.
Но когда я пытаюсь сохранить новый объект, я получаю следующую ошибку:
org.hibernate.PersistentObjectException: detached entity passed to persist: some.package.domain.Exercise
Моя сущность выглядит следующим образом
@Entity
class Exercise(
val name: String,
val description: String,
@JsonIgnore
@ManyToOne
val creator: User,
@OneToMany(fetch = EAGER)
@Fetch(SUBSELECT)
val videos: MutableList<Video> = mutableListOf(),
@Id
@GeneratedValue(strategy = SEQUENCE)
val id: Long = 0
)
Мой код для сохранения выглядит следующим образом
@Singleton
@Transactional
class ExerciseServiceDefault(override val repository: ExerciseRepository,
private val entityManager: EntityManager) : ExerciseService {
override fun update(id: Long, exercise: Exercise): Exercise {
val existing = get(id)
val new = Exercise(exercise.name, exercise.description, existing.creator, existing.videos, existing.pictures, id)
return repository.save(new)
// return entityManager.merge(new)
}
...
Если я изменю код выше на используйте entityManager.merge(new)
все работает просто отлично. Но я бы предпочел не вводить entityManager
.
Любую подсказку о том, как я могу сделать обновление, используя мой repository
?
Я пытался добавить cascade = [MERGE]
к моим отношениям безрезультатно.