我有一个错误ora-02291:完整性约束(地址\u r01)违反-父密钥没有找到后,我更新了我的应用程序中的 Spring 启动版本。调用userrepository.save函数时发生错误,该函数应首先触发save in users表,然后触发save in address表。
当我启用show\ usql时,我可以看到所发生的事情是地址在用户之前被保存,并且上面的错误被抛出。这在以前的版本中是不会发生的。
如果我将spring引导降级到2.1.1,这是以前的版本,一切正常。我想知道可能是什么问题,因为我找不到任何与spring启动版本相关的问题的参考。
这两个表之间的关系在下面的类中用@onetoone注解表示。
附言:这不是整个课程,它只是一个如何处理关系的例子。如您所见,users中的列id也用于@joincolumn注解中。
@Builder
@AllArgsConstructor
@Entity
@Table(name = "USERS")
public class UserEntity {
@Id
@Column(name = "id", unique = true, nullable = false, length = 40)
public String getId()
{
return this.id;
}
@Column(name = "FIRST_NAME", length = 75, nullable = false)
@NotNull
public String getFirstName()
{
return this.firstName;
}
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id", unique = true, nullable = false)
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
地址实体如下所示:
@Builder
@AllArgsConstructor(access = AccessLevel.PRIVATE)
@ToString
@Entity
@Table(name = "ADDRESS")
public class Address {
@Id
@Column(
name = "id",
unique = true,
nullable = false,
length = 40)
public String getId() {
return id;
}
@OneToOne(cascade = CascadeType.ALL, mappedBy = "address", fetch = FetchType.LAZY)
public UserEntity getUser() {
return this.user;
}
public void setUser(UserEntity user) {
this.user = user;
}
附言:
fk在地址表中。id是fk和pk
实体有一个共享id,两个表中的id相同
我发现这个错误发生在版本2.2.x上。在2.1.x版本中,它可以完美地工作。
edit2:如果我用mappedby反转@joincolumn注解,它将在版本2.2.x中工作。我想知道为什么
暂无答案!
目前还没有任何答案,快来回答吧!