2

我有两个实体

@Entity
@Table(name="parent")
public class Parent {
  @Id
  String uuid;

  @ElementCollection(fetch=FetchType.EAGER)
  @CollectionTable(
      name="child",
      joinColumns=@JoinColumn(name="parent_uuid", insertable=false, updatable=false)
  )

  @Column(name="uuid")
  private Set<String> childrenUuids = new HashSet<String>();
}

@Entity
@Table(name="child") 
public class Child {
  @Id
  String uuid;

  @Column(name="parent_uuid")
  String parentUuid;

}

现在当我坚持 Parent 时,由于 ManyToOne 关系,childrenUuids 中的孩子会自动坚持。我想防止对父级的所有操作(例如持久化、删除...)级联到子级,JPA 可以吗?我已经研究了几天,但找不到答案。谢谢你。

4

2 回答 2

1

您应该使用@OneToMany 而不是@ElementCollection。@OneToMany 默认情况下不会级联。据我所知,@ElementCollection 总是级联,这是有道理的,因为“@ElementCollection 定义了基本类型或可嵌入类的实例集合”,并且基本类型/可嵌入被认为是其父级的组成部分。

于 2012-09-16T18:18:45.907 回答
0

@ElementCollection 总是级联。我最终通过实现我的@ElementCollection 解决方案来解决这个问题。我仍然使用 JPA 注释,而是在 @ElementCollection 上方添加 @Transient 以使 JPA 忽略它。然后我将我的实现作为每个实体的 JPA 加载后侦听器,它将在实体加载后填充每个集合。

于 2012-09-17T06:14:34.763 回答