SpringBoot @EntityListeners, @PrePersist не вызывается, но @PostLoad делает - PullRequest
0 голосов
/ 14 апреля 2020

Я немного озадачен.

У меня есть ParentEntity, у него OneToOne отношение к ChildEntity. ChildEntity определил EntityListeners.


@Entity
class ParentEntity {
  // omeitted for brevity

  @OneToOne(fetch = FetchType.EAGER, cascade = Array(CascadeType.ALL))
  var childEntity: ChildEntity = _

}

@Entity
@EntityListeners(Array(classOf[ChildListener]))
class ChildEntity {
  // omitted for brevity

  @OneToOne(mappedBy = "childEntity", fetch = FetchType.LAZY)
  var parentEntity: ParentEntity = _
}

Слушатель находится здесь:

class ChildListener {

  // this method is never invoked
  @PrePersist
  @PreUpdate
  def enumToStr(childEntity: ChildEntity) = {
    childEntity.someEnumAsStr = childEntity.someEnum.toString()
    }
  }

  // it works
  @PostLoad
  def strToEnum(childEntity: ChildEntity) = {
    childEntity.someEnum = SomeEnum.withName(childEntity.someEnumAsStr)
  }
}

Я использую репозиторий для сохранения / поиска родительского объекта

trait ParentRepository extends PagingAndSortingRepository[ParentEntity, Long]

// somewhere in @Service class

parentRepository.save(newEntity)
parentRepository.findById(parentId)

Я написал iTest и использовал отладчик, чтобы отследить его. Почему PostLoad strToEnum работает, а PrePersist enumToStr - нет?

...