Я испытываю странную периодически возникающую проблему с JPA / Hibernate и MySQL 5.7. Я ищу предложения.
Моя сущность определяется с помощью:
@Temporal(TemporalType.TIMESTAMP)
@Column(name = "created_at", nullable = false)
protected Date createdAt;
, что означает следующее определение таблицы SQL:
`created_at` DATETIME NOT NULL
и отметка времени устанавливается при создании сущности с помощью
@PrePersist
protected void onCreate() {
updatedAt = createdAt = new Date();
}
Операция сохранения JPA иногда приводит к ошибке SQL из-за того, что нулевое значение предположительно отправлено в запросе UPDATE через репозиторий Spring CRUD.
Я подтвердил, что запрос на публикацию содержит поле created_at
, но, что более важно, следующий скриншот моего фида логов подтверждает, что значение created_at
присутствует . Однако последующее сохранение дует. (Если интересно, есть только одно поле «madeAt»):
Примечание. Советы AOP используются для интеграции Spring-ACL и не манипулируют данными сущностей (они обеспечивают удобный перехват для целей регистрации, как показано на скриншоте выше).
Я не могу достоверно воспроизвести ошибку. Что может быть причиной этого странного поведения? Я думал, что кэширование второго уровня - попытался отключить @Cacheable
на объекте, но безрезультатно. Включение подробного ведения журнала с привязкой SQL нецелесообразно из-за нерегулярного характера проблемы.