【问题标题】:Hibernate exception after adding orphanRemoval attribute添加 orphanRemoval 属性后休眠异常
【发布时间】:2020-04-27 19:05:33
【问题描述】:

因此,在我的一个实体中将orphanRemoval = true 添加到@OneToMany 关系后,我在尝试保存新实体或删除引用具有orphanRemoval = true 属性的现有实体时遇到以下异常。

我得到的例外是:

拥有的实体实例不再引用具有 cascade="all-delete-orphan" 的集合:fully.qualified.path.to.the.property.with.orphanRemoval.setToTrue

一对多关系是这样指定的:

  @OneToMany(
  targetEntity = MyEntity.class,
  fetch = FetchType.LAZY,
  mappedBy = "mappingField_",
  orphanRemoval = true,
  cascade = CascadeType.ALL)
  private List<MyEntity> myEntities_= new ArrayList<>();

当我尝试保存和刷新实体时出现异常:

myEntityRepository_.saveAndFlushAndRefresh(myEntityInstance);

我找不到很多关于此的信息。

【问题讨论】:

  • 你检查过this answer吗?要点:不要通过setter设置listmyEnitities_,使用add/remove方法改变它,并确保你的equals/hashCode()方法正确实现(如果某些字段改变hashCode可能会改变)
  • @AlexRudenko 感谢您的帮助,但这不是主要原因。

标签: java hibernate jpa


【解决方案1】:

我解决了这个问题,原因是我创建了新的子实体并在其中引用了父实体,然后我将使用 setter 设置父实体的子实体,这将导致以前持久的子实体被取消引用并导致上述异常。

【讨论】:

    猜你喜欢
    • 2011-06-12
    • 1970-01-01
    • 1970-01-01
    • 2011-02-14
    • 2010-12-25
    • 1970-01-01
    • 2014-08-22
    • 2011-09-20
    • 2017-07-06
    相关资源
    最近更新 更多