java - Hibernate:我不想删除 child

标签 java hibernate jpa hibernate-annotations

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

我有两个 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注解。那么你必须设置PersonanullTelefono ,并清除Telefono集合Persona在删除 Persona 之前从持久性上下文。所以你必须删除所有关联。

您甚至可以将其与 @PreRemove 结合起来注释。

关于java - Hibernate:我不想删除 child ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27590138/

相关文章:

java - JPA:设置@JoinColumn(updatable = false) 以避免 OptimisticLockException

java - hibernate JPA : ignore wrong sql foreign key values

java - 我无法选择何时使用 MouseListener 对象

java - 如何在 hibernate 中将ManyToOne关系设置为null

java - 如何通过hibernate检查数据库是否启动?

sql-server-2008 - 在 SQL Server 2008 中使用 Hibernate

java - native 查询仅在 H2 数据库中导致错误

java需要h2数据库抛出jdbc异常

java - Gson在json中存储对象类型

java - 想要在 Servlet 中使用 applicationContext 或 WebApplicationContext 来使用 Spring Bean。我怎样才能做到这一点