gpt4 book ai didi

java - 一对一 jpa 映射 DataIntegrityViolationException

转载 作者:行者123 更新时间:2023-12-02 11:34:38 29 4
gpt4 key购买 nike

我有 2 个表,Person 和 Phone,它们具有一对一的关系。

**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 数据。因此,当我尝试像这样保存一个 Person 时,它会给我 DataIntegrityViolationException - HsqlException:integrity consigration 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();

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

最佳答案

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

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

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

关于java - 一对一 jpa 映射 DataIntegrityViolationException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49040335/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com