Я немного озадачен.
У меня есть 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 - нет?