JPA:防止级联操作[持续,删除...]

时间:2012-09-16 18:06:52

标签: java hibernate jpa

我有两个实体

@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时,childUuids中的孩子会因为ManyToOne关系而自动持久化。我想阻止所有对父级的操作(例如,持久化,删除...)级联到Child,是否可以进行JPA?我已经研究了几天,但找不到答案。谢谢。

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

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