@CreatedDate注释不适用于 mysql

我是春天的新手,我对@CreatedDate注释在实体中的工作方式感到困惑。

我做了一个谷歌搜索,有很多解决方案,但除了一个之外,它们都不适合我。我很困惑为什么?

这是我首先尝试的

@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() {
    }

它不起作用。我得到了列中值的 NULL。created

然后我这样做了。

@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()


答案 1

我也遇到了这个问题,您的解决方案帮助了我,谢谢,我添加了一些其他注释来工作

拳头确保你放入弹簧应用配置

@SpringBootApplication
@EnableJpaAuditing

其次,请确保在所需的实体上使用此注释

  @Entity
  @Table
  @EntityListeners(AuditingEntityListener.class)

答案 2

如果您只是放在实体上,它们本身将无法正常工作。为了工作,你必须做更多的配置。@CreatedDate@EntityListeners(AuditingEntityListener.class)

假设在您的数据库中,的字段是 String 类型,并且您希望将当前登录的用户作为 的值返回,然后执行以下操作:@CreatedDate@CreatedDate

public class CustomAuditorAware implements AuditorAware<String> {

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

}

你可以在那里编写任何符合你需求的功能,但你肯定有一个bean,它引用了一个实现'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"/>

推荐