一对一jpa映射DataIntegrityViolationException

时间:2018-02-28 23:26:54

标签: java database hibernate jpa spring-data

我有两张桌子,人和电话,他们有一对一的关系。

**Person**
person_id
name

**Phone**
phone_id
person_id -- foreign key and not null constraint
number

这是我映射它的方式:

Person{
        @Column(name="person_id")
        Long personId;

        @OneToOne(mappedBy = "person", cascade = CascadeType.ALL, 
                    fetch = FetchType.EAGER, optional = false)
          private Phone phone;

      public void setPhone(Phone phone) {
        this.phone = phone;
        phone.setPerson(this);
    }
}

Phone{
        @OneToOne(fetch=FetchType.LAZY)
        @JoinColumn(name="person_id")
        private Person person;
}

我正在使用弹簧数据。因此,当我尝试保存这样的人时,它会给我DataIntegrityViolationException - HsqlException: integrity constraint violation: NOT NULL check constraint table: "PHONE" column: "person_id"

Person person = new Person();
Phone phone = new Phone();
//populate phone and person properties.
person.setPhone(phone);
repository.save(person);
repository.flush();

当我从表中删除not null约束并执行相同的插入时,它成功通过。

1 个答案:

答案 0 :(得分:1)

您从未为您的实体提供person_id的值。我的猜测是你打算在电话的人员字段中使用person_id,但错误输入为phone_id。

在这种情况下,空约束错误是合适的。

已编辑:或者,Person上的ID字段缺少@Id和@GeneratedValue注释,这些注释也可以解释空约束违规。