当前位置: 首页 > 知识库问答 >
问题:

AuditingEntityListener不适用于Spring jpa中扩展另一个抽象实体的实体

蓟雪峰
2023-03-14

我在各自的字段中使用了@CreatedBy、@CreatedDate、@LastModifiedBy和@LastModifiedDate注释。通过使用@MappdSuperclass、@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;
}

审计员我mpl.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,或者我在这里遗漏了什么。。??

共有1个答案

隆选
2023-03-14

我在您的类中添加了@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 {
}

一切都很完美!

 类似资料:
  • 我有一个实体VCenterDistributedVirtualPortgroup,它扩展了VCenterNetwork,两个实体在实体VCenterFolder中处于OneToMany关系中。我得到以下错误:

  • 我有一个抽象类B,它扩展了另一个抽象类A。在抽象类A中,我有一个受保护的方法转换。我想测试方法foo,它从没有实现的基类调用方法convert。如果无法更改转换方法签名,如何模拟方法转换。 我使用Mockito.spy()调用真正的方法,但转换方法是不可用的嘲弄(通过Mockito.when(...)。 告诉我如何测试方法foo。

  • 问题内容: 我之前了解到抽象类可以扩展具体类。尽管我没从JAVA设计师那里看到原因,但是没关系。我还了解到,扩展具体类的抽象类可以使重写的方法抽象。为什么?您可以提供有用的用例吗?我正在尝试学习设计模式,我不想错过任何东西。 这是示例: 问题答案: 如果我有一组想要默认实现的类(以便它们可以从扩展),并且想要强制提供自己的实现(在这种情况下使其抽象为子类会强制执行此操作。) 当然,此示例中的另一种

  • 我有一个抽象的BaseEntity类,所有具体的entity类都是从它扩展的。 以上设计是否有问题;at线 因为我希望连接表“baseentity_tag”(列“baseuid”)在每个具体实体类中都有引用,比如concrete1.java、concrete2.java等? 我想一个通用的连接表“baseEntity_tag”将不能满足所有具体实体的需要。

  • 类和的行为有何不同?我为什么要选择其中一个? (目前,TypeScript手册和语言规范不包括抽象类。)

  • 大约两个月前,我刚刚开始使用java,我正在尝试更多地理解抽象类。我理解抽象及其实现的基本思想,但我不明白为什么一个抽象类会扩展另一个抽象类,以及它添加了哪些功能。还有,我看到一个抽象类扩展了另一个抽象类,但它只实现了另一个抽象类的一个功能。 我确实查了一些示例代码,但它们只显示了实现,没有给出任何解释: 如您所见,抽象类并没有实现抽象类中的所有功能。它只实现函数。但是如果是具体的,那么就需要实现