Получение "отсоединенной сущности, переданной для сохранения" при попытке обновить сущность - PullRequest
1 голос
/ 14 апреля 2020

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

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

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

...