我有两张桌子,人和电话,他们有一对一的关系。
**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约束并执行相同的插入时,它成功通过。
答案 0 :(得分:1)
您从未为您的实体提供person_id的值。我的猜测是你打算在电话的人员字段中使用person_id,但错误输入为phone_id。
在这种情况下,空约束错误是合适的。
已编辑:或者,Person上的ID字段缺少@Id和@GeneratedValue注释,这些注释也可以解释空约束违规。