Java 一对一jpa映射DataIntegrityViolationException
我有两张桌子,一人一电话,他们是一对一的关系Java 一对一jpa映射DataIntegrityViolationException,java,database,hibernate,jpa,spring-data,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
**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;
}
我使用的是spring数据。所以,当我尝试保存这样的人时,它会给我DataIntegrityViolationException-HsqlException:integrity constraint违例:NOT NULL check约束表:PHONE column:Person\u id
当我从表中删除NOTNULL约束并执行相同的insert时,它将成功通过 您从未从实体中为person_id提供值。我猜您是想在Phone的person字段中使用person\u id,但输入的Phone\u id错误 在这种情况下,空约束错误是合适的
已编辑:或者,Person上的ID字段缺少@ID和@GeneratedValue注释,这也可能解释空约束冲突。您的字段名为Person\u ID还是phone\u ID?您的错误和提供的代码不匹配,因此可能存在其他字段,或者您提供的代码错误。不想复制粘贴代码,因此键入错误。在上面更新了它,并添加到我给出的答案中。有人帮你修好了吗?谢谢,我打错了。我不想复制粘贴真正的代码,所以我必须键入它。更新了它。问题仍然存在。再确认一次:Person::personId是否注释了@GeneratedValue@Id?它不包括在内,并且可能会导致出现如图所示的问题,因为personId的值从未初始化,因此为null,并且违反了如上所示的约束。
Person person = new Person();
Phone phone = new Phone();
//populate phone and person properties.
person.setPhone(phone);
repository.save(person);
repository.flush();