持久性异常外键约束在休眠中失败

Persistence Exception foreign key contraint fails in hibernate

我在hibernate中定义了下面两个类

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
 
}

@Entity
public class PhoneNumber {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    @ManyToOne(cascade = CascadeType.ALL)
    private Person person;
 
}


当我坚持一个 phone 数字对象或一个人对象时,它被正确插入。 但是当我这样做时

 Person person = session.get(Person.class,1);
        session.remove(person);
        transaction.commit();

我得到外键违规异常。但是既然我已经声明了一个列为 ManyToOne 不应该休眠自动删除相应的 phonnumber 记录?
我不确定我是否需要添加任何额外的代码来做到这一点

您有 bi-directional 关系,这就是为什么您也必须在 Person 中添加 PhoneNumber。并用mappedBy属性表示Person是反面,每次删除时,请将每个phone号也删除。

像这样:

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;

    @OneToMany(mappedBy="person", cascade = CascadeType.ALL)
    private Set<PhoneNumber> phoneNumbers;
 
}

查看 this 了解更多信息。

首先你要在类.

中定义Person和PhoneNumber的关系

抛出错误是因为有 phone 个数字取决于您删除的人物对象。 如果您添加 @OneToMany,您还可以定义 属性 cascade = CascadeType.ALL,然后所有 phone 数字将因此被删除。

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    private String name;

    @OneToMany(mappedBy = "person", cascade = CascadeType.ALL)
    private List<PhoneNumber> phoneNumbers;
}

@Entity
public class PhoneNumber {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne
    private Person person;

}