Как создать @CreatedDate LocalDateTime в качестве отметки времени? - PullRequest
4 голосов
/ 18 февраля 2020

Я использую spring-jpa для сохранения LocalDateTime created_at с @CreatedDate.

@CreatedDate
private LocalDateTime created_at;

Проблема: при этом автоматически генерируется столбец с типом столбца datetime(6) mysql.

Вопрос: как я могу изменить это на TIMESTAMP тип? Я пытался @Temporal(TIMESTAMP), но это не разрешено на LocalDateTime.

Возможно ли это вообще?

Ответы [ 2 ]

1 голос
/ 18 февраля 2020

Я могу заставить его работать с любым из следующих решений:

    //spring way, with @EnableJpaAuditing on configuration
    @EntityListeners(AuditingEntityListener.class)
    class MyEntity {
        @CreatedDate
        @Column(columnDefinition = "TIMESTAMP", nullable = false)
        private LocalDateTime created_at;
    }

    //hibernate way
    @CreationTimestamp
    @Temporal(TemporalType.TIMESTAMP)
    private Date created_at;

    //mysql way
    @Column(insertable = false, updatable = false,
            columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
    private LocalDateTime created_at;

Для mysql важная часть: insertable=false для mysql с использованием определенных DEFAULT CURRENT_TIMESTAMP и updatable=false для ON UPDATE CURRENT_TIMESTAMP.

В противном случае, hibernate orm отправит created_at=null в качестве нулевого значения в базу данных, предотвращая принятие определения столбца! Или хуже, если вы установите nullable=false, вставка завершится неудачно, хотя вы определили обработку метки времени по умолчанию для столбца.

0 голосов
/ 18 февраля 2020

Вы можете сделать одну вещь. Сгенерировать текущее время в соответствии с необходимой формой. С помощью Java существует метод с именем DateTimeFormatter. Позвольте мне объяснить через код: -


LocalDate localDate = LocalDate.now ();

DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern ("гггг-ММ-дд");
String Date = dtf.format (localDate);

, а затем после присвоения этой даты вашему полю. Это будет работать отлично.

...