【问题标题】:AuditingEntityListener is not working for the entity that extends another abstract entity in spring jpaAuditingEntityListener 不适用于在 spring jpa 中扩展另一个抽象实体的实体
【发布时间】:2019-04-21 20:53:24
【问题描述】:

我在各自的字段上使用了@CreatedBy、@CreatedDate、@LastModifiedBy 和@LastModifiedDate 注释。通过使用@MappedSuperclass,@EntityListeners,我能够在列之上持久化。

但这不适用于以下情况:

@MappedSuperclass
@EntityListeners(AuditingEntityListener.class)
public abstract class Auditable<U> {
    @CreatedBy
    protected U createdBy;
    @CreatedDate
    @Temporal(TIMESTAMP)
    protected Date creationDate;
    @LastModifiedBy
    protected U lastModifiedBy;
    @LastModifiedDate
    @Temporal(TIMESTAMP)
    protected Date lastModifiedDate;
}

@Entity
@Table(name = "tabel1")
@PrimaryKeyJoinColumn(name = "ID")
class A extends B {

    @Column(name = "NAME1", nullable = false)
    private String name1;
    @Column(name = "CONTENT1", nullable = false)
    private String content1;
}

@Entity
@Table(name = "tabel2")
public abstract class B extends Auditable{
    @Id
    @GeneratedValue
    @Column(name = "ID", nullable = false)
    private int id;
    @Column(name = "NAME", nullable = false)
    private String name;
    @Column(name = "CONTENT", nullable = false)
    private String content;
}

AuditorAwareImpl.java

public class AuditorAwareImpl implements AuditorAware<String>
{
    @Override
    public Optional<String> getCurrentAuditor()
    {
        return Optional.ofNullable("Saravanan");

    }

}

JpaAuditConfiguration.java

@Configuration
@EnableJpaAuditing(auditorAwareRef = "auditorProvider")
public class JpaAuditConfiguration
{
    @Bean
    public AuditorAware<String> auditorProvider()
    {

        return new AuditorAwareImpl();
    }
}

在这种情况下,实体 B 填充了审计列。但实体 A 不是。有没有办法填充实体 A 或者我在这里错过了什么......??

【问题讨论】:

  • A类是否定义为实体?
  • 是的,我也编辑了代码

标签: spring spring-mvc spring-boot spring-data-jpa


【解决方案1】:

我在你的类中添加了 @Entity 注释:

@Entity
public class A extends B {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;
    private String content;

}

@Entity
public class B extends Auditable<String> {

    @Id
    @GeneratedValue
    private Integer id;

    private String name;
    private String content;
}

持久性配置类(用于 Spring Boot):

@Configuration
@EnableJpaAuditing
public class PersistenceConfig {
}

一切都很完美!

【讨论】:

  • 感谢您的回复.. 但对我来说,一个实体没有填充审计字段..我也更新了其他类.. 你能验证一下吗
  • 我已经发布了我的源代码here。希望对你有用。
  • 当我查看在这里声明为抽象的代码 B 实体时...我已经修改了上面的代码。你能看看那个huymb ..吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-03
  • 1970-01-01
  • 2011-07-16
  • 1970-01-01
  • 2021-07-04
  • 2015-10-17
相关资源
最近更新 更多