java - ManyToOne 单向禁用约束

标签 java hibernate jpa constraints many-to-one

我有以下单向 ManyToOne 关系:

@Entity
@Table(name = "Child")
public class Child {
    @Id
    private Integer id;

    @ManyToOne(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
    private Parent parent; 
}

@Entity
@Table(name = "parent")
public class Parent{
    @Id
    private Integer id;
}

当我尝试从数据库中删除父实体时,我遇到了约束冲突。

ORA-02292: integrity constraint violated - child record found

我需要的是父实体被删除,即使它有子实体,但子实体应该保留。

如何改变这种关系?

最佳答案

如果使用关系,则无法使用 JPA。使其成为 ManyToOne 表示外键字段中的值将存在于父表中。 JPA 将无法区分空 fk 值和父表中没有关联行的 fk 值。

如果确实必须完成(并且在我看来不应该这样做),则需要使用基本映射而不是 ManyToOne 来映射 Child 中的整数外键值。这允许它的设置独立于现有的父实体 - null 表示 null,a value 表示一个值。如果需要实体本身,您可以查询关联的父实体。

关于java - ManyToOne 单向禁用约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17974983/

相关文章:

java - 如何使用SpEL提取列表中对象的单个属性列表?

java - 在删除之前首先检查数据库是否存在实体是有意义的,例如使用 Spring

java - OpenJPA 语法错误 : Encountered "optimize"

MySQL锁等待超时和死锁错误

java.lang.NoClassDefFoundError : Could not initialize class org. jadira.usertype.dateandtime.joda.integrator.UserTypeJodaTimeHibernateIntegrator 错误

java - JPA DELETE 操作中的一对多关系不起作用

java - getActualMaximum 函数返回 kotlin 中不存在的值

java - JOOQ 中的行级安全实现

java - currentTimeMillis() 到年、日、分钟和倒叙词。 (难的)

java - 如何判断 Hibernate 实体是否为只读