Hibernate:我不想删除孩子

时间:2014-12-21 14:11:58

标签: java hibernate jpa hibernate-annotations

我是意大利人,我为我的英语道歉。

我有两个POJO类,它们在我的Db中显示父表和子表。

父。 Persona.java

@Id @GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

@Column(name = "nome", length = 30, nullable = false)   
private String nome;

@Column(name = "cognome", length = 30, nullable = false)
private String cognome;

@Column(name = "eta")
private int eta;

@OneToMany(cascade = {CascadeType.PERSIST, CascadeType.REFRESH}, mappedBy = "persona", orphanRemoval = false)
@Column(nullable = true)
private List<Telefono> numeriDiTelefono;

// Others getters and setters

子。 Telefono.java

@Id
@Column(name = "numero_telefono")
private String numeroDiTelefono;

@Column(name = "tipo")
private String tipo;


@ManyToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST })
@JoinColumn(name = "persona_id", nullable = true)
private Persona persona;

// Others getters and setters

我已经使用注释在数据库中映射这些类。

当我尝试从数据库中删除Persona时,hibernate会删除与该Persona关联的Telefono,我不想要它。 我希望子引用在Telefono表的字段persona_id中具有空值,如何获得该结果?我应该使用什么注释? 谢谢大家。

1 个答案:

答案 0 :(得分:4)

JPA并不神奇。

正如@Andy Dufresne建议的那样,删除CascadeType.REMOVE注释。然后,您必须在Persona中将null设置为Telefono,并清除Telefono的{​​{1}}集合,然后再从Persona中移除Persona持久化上下文。所以你必须删除所有关联。

您甚至可以将其与@PreRemove注释结合使用。