Получение "отделенной сущности, переданной для сохранения" при попытке обновить сущность

Я пытаюсь обновить объект. В рамках этого процесса я загружаю старую из базы данных и "передаю" значения ее свойств новому объекту.

Но когда я пытаюсь сохранить новый объект, я получаю следующую ошибку:

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] к моим отношениям безрезультатно.

0 ответов

Другие вопросы по тегам