Spring Boot 为什么JpaRepository为这个一对多关系返回一个空集?

vq8itlhq  于 2024-01-06  发布在  Spring
关注(0)|答案(1)|浏览(168)

我在一对多关系中有两个实体。创建、更新和删除都按预期工作。但是,当我从数据库中读取实体时,关系字段被保留为空集,而不是包含数据库中的对象。
这两个实体是:

  1. @Entity
  2. @Table(name = "point_in_time")
  3. class PointInTime(
  4. @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  5. var id: Long,
  6. val title: String,
  7. val note: String
  8. ) {
  9. @OneToMany(mappedBy = "symptom", cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
  10. var symptoms: Set<Symptom> = emptySet()
  11. @field:Column(updatable = false)
  12. val createdAt: Instant = Instant.now()
  13. }

个字符
仓库是一个简单的JpaRepository,定义如下:

  1. @Repository
  2. interface PointInTimeRepository : JpaRepository<PointInTime, Long>


但是对象从对存储库调用以下方法返回

  1. repository.findByIdOrNull(id)


只有PointInTime.symptoms的空集合
我必须添加什么才能正确填充symptoms字段?我特别困惑,因为创建和更新这个字段可以正常工作,并且持久化在数据库中。

xhv8bpkk

xhv8bpkk1#

mappedBy看起来不正确:

  1. @OneToMany(mappedBy = "symptom", cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
  2. var symptoms: Set<Symptom> = emptySet()

字符串
mappedBy告诉Hibernate查看Symptom类中的symptom属性。但在您的情况下,它应该查看pointInTime字段而不是symptom

  1. @JoinColumn(name = "point_in_time_id", nullable = false)
  2. var pointInTime: PointInTime,


范例:

  1. @OneToMany(mappedBy = "pointInTime", cascade = [CascadeType.ALL], fetch = FetchType.EAGER)
  2. var symptoms: Set<Symptom> = emptySet()

展开查看全部

相关问题