0

在我的应用程序中,我有两个实体 Person 和 Activity

@Entity
public class Person
{
  .
  .
  .
  @OneToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER,orphanRemoval=true)
  Set<Activity> a;

  // getters setters constructors
}

... 和...

@Entity
public class Activity
{
  .
  .
  .
  // getters setters constructors
}
  1. 首先我创建了两个 Activity 的对象
  2. 我将活动的对象添加到 Person 对象
  3. 我持久化了 Person 对象(两个活动对象被持久化了,它工作正常)
  4. 然后我从我的数据库中删除一个 Activity 对象
  5. 我从数据库中选择我的 Person 对象

结果是一个带有Set<Activity>with的 Person 对象size=2

有人能帮助我吗?

4

1 回答 1

0

当您从数据库中删除 Activity 对象时,您必须更新 Person 中的集合并从集合中删除该 Activity 对象。否则,您将对集合中不存在的 Activity 对象的引用损坏。

另一方面,由于您启用了 orphanRemoval,您只需从 Person 中的集合中删除 Activity ,它也应该自动从数据库中删除。

另一种选择是将集合定义为mappedBy,然后当从数据库中删除 Activity、再次从数据库加载或刷新 Person 对象时,集合将自动更新。

于 2014-07-11T12:04:40.120 回答