【问题标题】:JPA + Hibernate EnversJPA + 休眠环境
【发布时间】:2018-01-30 08:04:40
【问题描述】:

我有一个基于 Spring MVC + JPA + MYSQL 的小项目。由于某些原因,我需要对我的几个实体进行审计。我搜索了一下,发现@Audited -- 注释为我做了。

  1. 我的问题是,这是一种从 Hibernate 审计实体的好方法,而其余的则使用 JPA。 JPA 中是否有相同的功能?

  2. 1234563想好了吗?

提前致谢

【问题讨论】:

  • 1) 您可以使用 Spring Data 中的Auditing,但如果您不依赖它,请不要仅将其用于 2 个注解,最好使用 Hibernate。
  • 2) JPA 有PrePersist 来处理实体生命周期。
  • @BogdanOros - 我如何使用它来获取审计实体的修订 ID?你能给我代码示例吗?
  • @PrePersist的一个例子?
  • @PrePersist 时获取 Revision 的示例

标签: java mysql spring hibernate jpa


【解决方案1】:
@EntityListeners(AuditingListener.class)
class SomeAuditedEntity { ... }

class AuditingListener {

    @PrePersist
    void preHandle(Object auditableObject) {
    }
}

Object 不是处理生命周期的最佳方式,更喜欢使用一些自定义接口,例如Auditable

【讨论】:

  • 我已经在我的实体上使用了它'@PrePersist void updateCreatedDate() { this.creationDate = new Date(); } ' --- 我需要的是获取 _AUD 表的 REV ID。我该怎么做
  • 假设我有实体 Cat - 标记为 @Audited - 我需要在提交表 Cat_AUD 之前获取 REV 号 - 这是由 Hibernate 自动生成的
  • 您可以使用AuditReader 创建查询并创建查询以获取您需要的所有实体修订。
  • 我已经创建了监听器 - 现在我在 @PrePersist 上获取我的实体(例如 Cat 实体) - 但问题是我不知道如何在 PrePersist 上获取 _AUD 对象(例如 Cat_AUD)。我需要获取由 Hibernate 生成的修订版数。我该怎么做?
  • AuditReader 从数据库中读取已持久化的项目 - 我需要在已审计实体持久化到数据库之前获取修订 ID。在提交之前,我无法从 AuditReader 获得修订号 - 如果可能,请给我一个例子。
猜你喜欢
  • 2014-06-07
  • 2021-01-20
  • 2018-06-29
  • 1970-01-01
  • 2016-05-27
  • 2016-03-31
  • 1970-01-01
  • 1970-01-01
  • 2016-01-19
相关资源
最近更新 更多