我认为我的Hibernate数据库设置有问题。我有一些实体类 Citizen,这些实体类与 WeeklyCare 存在一对多的关系。以下是相关代码。
Citizen:
Citizen:
@Entity
@Table(name = "citizens")
public class Citizen {
@Id
@Size(max = 10, min = 10, message = "CPR must be exactly 10 characters")
private String cpr;
@OneToMany()
@JoinColumn(name = "cpr")
private List<WeeklyCare> weeklyCare;
}
每周关注:
@Entity
public class WeeklyCare {
@EmbeddedId
private WeeklyCareIdentifier weeklyCareIdentifier;
}
每周照护标识:
@Embeddable
public class WeeklyCareIdentifier implements Serializable {
@NotNull
@Size(max = 10, min = 10, message = "CPR must tbe exactly 10 characters")
private String cpr;
@NotNull
private Integer week;
@NotNull
private Integer year;
}
在将数据保存到数据库时,我遇到了一些问题:
- 由于需要一个
Citizen
,因此我无法首先保存WeeklyCare
。 - 当我将市民发送到后端时,对象包含
WeeklyCare
的列表。当我尝试保存市民时,会出现以下错误:无法找到 id 为 Application.Models.WeeklyCareIdentifier@b23ef67b 的 Application.Models.WeeklyCare
在保存之前,我可以通过清除 Citizen
的 WeeklyCare
列表,然后在保存之后保存 WeeklyCare
列表来解决此问题,但这感觉像是一种可怕的方法。
我想让 hibernate 在保存市民时忽略 WeeklyCare
列表,但在获取市民时认可它。这是可能的吗?或者有更好的方法吗?谢谢。
citizenRepository.findAll();
将其返回到我的前端时,我会收到一个stackoverflow错误。这是因为JSON响应返回每个Citizen
及其WeeklyCare
列表。每个WeeklyCare
包含一个再次包含WeeklyCare
列表的CItizen
,如此循环。我该如何解决这个问题? - JesperWeeklyCare
中的Citizen
上使用@JsonIgnore
注释来解决它。不确定这是否是最佳解决方案。还有一个名为@JsonIdentityInfo
的注释可能会有用。 - Jesper