Spring Boot和Hibernate-x实例的标识符已更改为null

时间:2019-06-05 19:45:49

标签: java spring hibernate

对于具有Heartcore的所有实体,我们都有一个超类。

@MappedSuperclass

我具有以下单向一对一关系:

  

儿童实体

@Id
private String id;

@Column(nullable = false)
@NonNull
private String uuid;

@NonNull
@Column(nullable = false)
private String kanton;

// specific Setter
public void setKanton(String kanton) {
  if (kanton != null) {
    id = uuid + "_" + kanton;
  }
  this.kanton = kanton;
}

public void setUuid(String uuid) {
  if (kanton != null) {
    id = uuid + "_" + kanton;
  }
  this.uuid = uuid;
}

当我坚持一个父母和一个孩子,然后尝试使用class OtoUniChild extends Heartcore { @Id private String id; @OneToOne @MapsId private OtoUniParent otoUniParent; public void setOtoUniParent(OtoUniParent otoUniParent) { if (otoUniParent != null) { if (StringUtils.isNoneBlank(otoUniParent.getUuid(), otoUniParent.getKanton())) { this.otoUniParent = otoUniParent; setUuid(otoUniParent.getUuid()); setKanton(otoUniParent.getKanton()); return; } throw new InvalidObjectException("Es wurde ein invalides Objekt übergeben!"); } this.otoUniParent = null; } 从子存储库中获取一个孩子时,我刚得到了错误findById(149727fd-b0ce-4069-bcd9-d67fdbe69021_SG)。我不知道这怎么会发生!

* Spring Boot v.1.5.8.RELEASE

1 个答案:

答案 0 :(得分:0)

我相信这是由于OtoUniChild类中的@Id双重定义造成的:

  • 一次进入Heartcore超类。
  • 一次进入实体本身

@MappedSuperclass不允许这样的重新定义,但是您碰巧要用相同的名称和类型来重新定义它。但是,您仍然可以期望某些方法可以看到前者,而某些则可以看到后者。