spring data jpa 报错 org.hibernate.PersistentObjectException: detached entity passed to persist

目录

导致原因

如有A,B,C三个实体,其中A与B的关系为OneToMany,A中直接传入B的List实现级联存储,C与A的关系为ManyToOne,具体看如下三个实体:

class A {
    ...
    @OneToMany(mappedBy = "a", cascade = [CascadeType.ALL])
    var bList: MutableList<B>? = null
}
class B {
    ...
    @ManyToOne
    @JoinColumn(name = "a_id")
    @JsonIgnore
    var a: A? = null
}
class C {
    ...
    @ManyToOne
    @JoinColumn(name = "a_id")
    @JsonIgnore
    var a: A? = null
}

报错接口是A的更新接口,更新接口中A传入了bList,在bList被merge后紧接着findOneC对象,因为接口有事务,读出C对象中的A就会报错。

解决办法

  1. 取消事务,删除 @Transactional

  2. 将级联的 cascade 由 CascadeType.ALL 改为 CascadeType.MERGE。但是创建A时传入bList不会级联存储,更新是可以的。

  3. 将报错的findOneC对象的代码移到merge bList之前。

参考资料

标签: 无

声明:本博客如无特殊说明皆为原创,转载请注明来源:spring data jpa 报错 org.hibernate.PersistentObjectException: detached entity passed to persist谢谢!

相关文章

发表评论:

icon_question.pngicon_razz.pngicon_sad.pngicon_evil.pngicon_exclaim.pngicon_smile.pngicon_redface.pngicon_biggrin.pngicon_surprised.pngicon_eek.pngicon_confused.pngicon_cool.pngicon_lol.pngicon_mad.pngicon_twisted.pngicon_rolleyes.pngicon_wink.pngicon_idea.pngicon_arrow.pngicon_neutral.pngicon_cry.pngicon_mrgreen.png