将spring boot从2.1.1升级到2.2.10后找不到父密钥

xtfmy6hx  于 2021-07-03  发布在  Java
关注(0)|答案(0)|浏览(337)

我有一个错误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中工作。我想知道为什么

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题