Что может привести к несоответствию состояния сущности JPA в пределах одного потока? - PullRequest
1 голос
/ 27 марта 2019

Я испытываю странную периодически возникающую проблему с 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»): screenshot

Примечание. Советы AOP используются для интеграции Spring-ACL и не манипулируют данными сущностей (они обеспечивают удобный перехват для целей регистрации, как показано на скриншоте выше).

Я не могу достоверно воспроизвести ошибку. Что может быть причиной этого странного поведения? Я думал, что кэширование второго уровня - попытался отключить @Cacheable на объекте, но безрезультатно. Включение подробного ведения журнала с привязкой SQL нецелесообразно из-за нерегулярного характера проблемы.

...