我是意大利人,我为我的英语道歉。
我有两个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中具有空值,如何获得该结果?我应该使用什么注释? 谢谢大家。
答案 0 :(得分:4)
JPA并不神奇。
正如@Andy Dufresne建议的那样,删除CascadeType.REMOVE
注释。然后,您必须在Persona
中将null
设置为Telefono
,并清除Telefono
的{{1}}集合,然后再从Persona
中移除Persona
持久化上下文。所以你必须删除所有关联。
您甚至可以将其与@PreRemove
注释结合使用。