我有两个实体
@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?我已经研究了几天,但找不到答案。谢谢。
答案 0 :(得分:1)
您应该使用@OneToMany而不是@ElementCollection。 @OneToMany默认情况下不会级联。 @ElementCollection总是级联,据我所知,哪种有意义,因为“@ElementCollection定义了基本类型或可嵌入类的实例的集合”,基本类型/嵌入式被认为是其父类的组成部分。
答案 1 :(得分:0)
@ElementCollection总是级联。我最终通过实现@ElementCollection的解决方案来解决这个问题。我仍然使用JPA注释,而是在@ElementCollection之上添加@Transient以使JPA忽略它。然后我将我的实现作为JPA后加载侦听器放到每个实体上,这将在加载实体后填满每个集合。