@CreatedDate注解不适用于mysql

k10s72fa  于 2023-08-02  发布在  Mysql
关注(0)|答案(6)|浏览(125)

我是spring的新手,我对@CreatedDate annotation在实体中的工作方式感到困惑。
我做了一个谷歌搜索,有很多解决方案,但没有一个对我有效,除了一个。我很困惑为什么?
这是我先试的

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @CreatedDate
    private Date created;

    public User(String name) {

        this.name = name;
    }

    public User() {
    }

字符串
但没有成功。created列中的值为NULL。
然后我做了这个。

@Entity
@EntityListeners(AuditingEntityListener.class)
public class User implements Serializable {

    @Id
    @GeneratedValue
    private Long id;
    private String name;

    @CreatedDate
    private Date created = new Date();

    public User(String name) {

        this.name = name;
    }

    public User() {
    }


这实际上将时间戳存储在数据库中。我的问题是我遵循的大多数教程建议我不需要new Date()来获取当前时间戳。看起来我确实需要那个。有什么我遗漏的吗?

8ehkhllq

8ehkhllq1#

我也有这个问题,你的解决方案帮助了我,谢谢,我添加了一些其他的注解工作
首先确保你把SpringApplication配置

@SpringBootApplication
@EnableJpaAuditing

字符串
其次,确保在所需的实体上使用此注解

@Entity
  @Table
  @EntityListeners(AuditingEntityListener.class)

8nuwlpux

8nuwlpux2#

如果你只是把@EntityListeners(AuditingEntityListener.class)放在你的实体上,@CreatedDate本身是不会工作的。为了让它工作,你必须做更多的配置。
假设在您的数据库中,@CreatedDate的字段是String类型,并且您希望返回当前登录的用户作为@CreatedDate的值,然后执行以下操作:

public class CustomAuditorAware implements AuditorAware<String> {

    @Override
    public String getCurrentAuditor() {
        String loggedName = SecurityContextHolder.getContext().getAuthentication().getName();
        return loggedName;
    }

}

字符串
您可以在那里编写任何适合您需要的功能,但是您肯定必须有一个引用实现AuditorAware的类的bean 第二部分同样重要,是创建一个bean,返回带有@EnableJpaAuditing`注解的类,如下所示:

@Configuration
@EnableJpaAuditing
public class AuditorConfig {

    @Bean
    public CustomAuditorAware auditorProvider(){
        return new CustomAuditorAware();
    }
}


如果您毒药是XML配置,请执行以下操作:

<bean id="customAuditorAware" class="org.moshe.arad.general.CustomAuditorAware" />
    <jpa:auditing auditor-aware-ref="customAuditorAware"/>

9fkzdhlc

9fkzdhlc3#

您可以像这样使用@creationTimestamp和@UpdateTimestamp:

@CreationTimestamp
  private Instant createdAt;

  @UpdateTimestamp
  private Instant updatedAt;

字符串

qc6wkl3g

qc6wkl3g4#

如果你想使用java8时间类:

@EnableJpaAuditing(dateTimeProviderRef = "auditingDateTimeProvider")
....

@Bean(name = "auditingDateTimeProvider")
public DateTimeProvider dateTimeProvider() {
        return () -> Optional.of(OffsetDateTime.now());
}

字符串

l2osamch

l2osamch5#

如果不使用JPA Entity listener,创建日期将无法工作,因为这是JPA进行审计和创建或修改日期的方式。
只需修改如下代码:

@Entity
@EntityListeners(AuditingEntityListener.class)
class XYZ {

    @Setter(value = AccessLevel.NONE)
    @CreatedDate
    @Column(name = "date_time")
    private Date dateTime;

}

字符串

fd3cxomn

fd3cxomn6#

根据代码添加@EnableMongoAuditing或@EnableJpaAuditing

相关问题