如何生成@CreatedDate LocalDateTime 作为时间戳?

mem*_*und 5 java mysql spring hibernate spring-data-jpa

我使用的是spring-jpa坚持一个LocalDateTime created_at@CreatedDate

@CreatedDate
private LocalDateTime created_at;
Run Code Online (Sandbox Code Playgroud)

问题:这会自动生成具有datetime(6) mysql列类型的列。

问题:如何将其更改为TIMESTAMP输入?我试过了,@Temporal(TIMESTAMP)但这是不允许的LocalDateTime

有可能吗?

mem*_*und 7

我可以让它与以下任何解决方案一起使用:

    //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;
Run Code Online (Sandbox Code Playgroud)

对于mysql重要的部分是:insertable=falsefor mysql 使用定义的DEFAULT CURRENT_TIMESTAMP, 和updatable=falsefor ON UPDATE CURRENT_TIMESTAMP.

否则,hibernate orm 会将created_at=null空值发送到数据库,从而阻止列定义接管!或者更糟糕的是,如果您设置nullable=false,尽管您为列定义了默认时间戳处理,但插入将会失败。


Dee*_*mar -3

你可以做一件事根据你需要的形式生成当前时间使用Java有一个名为DateTimeFormatter的方法。让我通过代码解释一下:-


LocalDate localDate = LocalDate.now();

DateTimeFormatter dtf1 = DateTimeFormatter.ofPattern("yyyy-MM-dd");
字符串日期 = dtf.format(localDate);

然后将此日期分配给您的字段。它会工作得很好。