我是意大利人,我为我的英语道歉。
我有两个 POJO 类,它们在我的数据库中表示父表和子表。
家长。角色.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
child 。 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
我使用注释来映射数据库中的这些类。
当我尝试从数据库中删除角色时, hibernate 会删除与该角色关联的 Telefono,我不想要它。 我希望子引用在 Telefono 表中的字段 persona_id 中具有空值,如何获取该结果?我应该使用什么注释? 谢谢大家。
最佳答案
JPA 并不魔法。
正如 @Andy Dufresne 建议的那样,删除 CascadeType.REMOVE
注解。那么你必须设置Persona
至null
在 Telefono
,并清除Telefono
集合Persona
在删除 Persona
之前从持久性上下文。所以你必须删除所有关联。
您甚至可以将其与 @PreRemove
结合起来注释。
关于java - Hibernate:我不想删除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590138/