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

将Spring Data审计注释与na@Embedable类一起使用

孟茂学
2023-03-14

我想使用Spring Data自动实体审计(Spring提供:@EnableJpaAudting、AuditingEntityListener、@CreatedBy、@CreatedDate、@LastModifiedBy、@LastModifiedDate),并让这些注释注释的字段成为@Embed类的一部分,我可以将其用作我想要审计的实体中的字段。这是一个示例-我只显示了相关的代码,它编译并运行:

实体:

@EntityListeners(AuditingEntityListener.class)
html" target="_blank">public class EntityA {

    {...}

    @Embedded
    private AuditFields audit;
}

具有审核字段的可嵌入类:

@Embeddable
public class AuditFields {

    {...}     

    @Column(...)
    @CreatedDate
    private LocalDateTime createdDate;
}

我在一个配置类上启用了@enablejpaaauditing,auditing处于启用状态,我已经验证了所有用@EntityListeners(AuditingEntityListener.class)注释的类都调用了AuditingEntityListener。

我不想在审计字段中使用@MaspdSuperclass,然后在每个实体中扩展它,因为对我来说,这完全违反了类继承代表什么的想法。

我不想创建实体实现的我自己的接口,这会将审计字段公开给一些自定义实体侦听器(如果是这种情况,我甚至可以使用Spring的可审计接口并获得相同的结果,因为AuditingEntityListener会很容易地选择它)。使用此解决方案使四个字段注释毫无意义,因为我手动公开了供Spring使用的字段。

查看它在Spring中的实现方式,AuditingHandler扫描AuditingEntityListener拾取的每个实体,以查找它是否实现了Audable,或者通过一些花哨的包装等,查找由四个审计字段注释注释的字段。它不查看嵌入式对象及其字段。

使用@EntityListeners注释来注释@Embedable类本身不会做任何事情——可以预见的是,它没有注册为实体,那么为什么要为它调用任何实体侦听器。

我使用Spring审计功能的想法可能吗?也许我缺少一些方法来配置Spring,以便在扫描实体中的审计注释时也考虑到实体中的嵌入对象?

或者,我只是在使用自己的接口和实体侦听器?Spring的Auditable接口公开了许多我不需要的方法,在我的简单用例中,我可以只获取和设置嵌入对象。我会转而创建自己的界面和监听器。

共有1个答案

施景同
2023-03-14

您很可能有一个旧版本的SpringDataJap。

我不知道它是在哪个版本中引入的,但对于版本1.11它不起作用,对于版本2.22它起作用。

 类似资料:
  • 我使用AWS加密客户端。下面的代码抛出错误为 错误:@DoNotTouch不适用于现场 然而,如果我给出@DoNotTouch配置,如下所示[使用getter和setter] 这很好用。我猜lombok生成的getter和setter不会被AmazoneCryptionClient识别 我在跟踪这个aws doc:https://aws.amazon.com/blogs/developer/cli

  • 我可以使用注释将jdbi查询的结果映射到我感兴趣的bean,如下所示: 如果应用程序中使用的实例尚未注册到任何自定义映射器中,则此操作很好。 此映射器在应用程序开始时注册到实例,如下所示: 重写方法,并提供逻辑将任何类型的结果从数据库转换为相关的bean类型。正是这个uber转换器负责整个应用程序中所有DB到POJO的转换。 我的问题是:有没有一种方法可以告诉继续使用这个将结果从数据库转换为所有类

  • 我在我的应用程序中使用带有陶土的ehcache。当我使用带有陶土的ehcache时,我的响应时间增加了700倍。我认为陶土需要时间来测量物体的大小,因为它给了我警告: net.sf.ehcache.pool.sizeof。ObjectGraphWalker checkMaxDepth警告:在尝试计算对象图的大小时,已达到1000个对象引用的配置限制。如果继续调整大小操作,可能会出现严重的性能下降。

  • 我想在kotlin数据类中使用@CreatedDate注释。所有属性都应初始化为不可变(val)。问题是,实现无法处理不可变变量。不会设置正确的日期,且变量为空。通过可变变量,实现可以设置日期。 示例: kotlin编译器是否有专门的插件来解决这个问题,或者在同一个数据类中使用val和var可以吗?

  • 是否可以通过注释在Spring Cloud Circuit Breaker上使用Resilience4j?我找不到任何关于它的留档,只有关于通过代码使用弹性4j的示例

  • 问题内容: 我有一个使用自动装配的3个不同类的A类 在测试它们时,我只希望将其中两个类(B&C)作为模拟,并让D类在正常运行时可以自动装配,但此代码对我不起作用: 甚至有可能这样做吗? 问题答案: 应该是这样的 如果您不想成为别人,则无需在课堂上做任何事情。您 应具有的正确实例。此外,我认为你需要使用的工作,用正确的设定。因为您没有使用,所以需要使用 MockitoAnnotations.init