【问题标题】:Auditing an entity using Spring/hibernate使用 Spring/hibernate 审计实体
【发布时间】:2019-05-25 05:44:04
【问题描述】:

我有一个表 T_TEST。我已经为它创建了一个实体。我需要在 T_TEST_AUDIT 中审计该实体上的所有 DBL 操作。

我该怎么做。

我正在使用 Sprng-boot/Hibernate 。 我浏览了很多在线教程并尝试实现它,但没有一个适用于我的场景

我浏览了很多在线教程并尝试实现它,但没有一个适合我的场景。

我只能在 T_TEST 中插入记录,但不能在 T_TEST_AUDIT 中插入记录

CREATE TABLE T_TEST 
(
ID NUMBER ,
EMP_NAME VARCHAR2(200),
SAL NUMBER,
MODIFICATION_DATE DATE,
CREATE_DATE DATE,
CREATED_BY VARCHAR2(200),
APPROVED_BY VARCHAR2(200)
);



CREATE TABLE T_TEST_AUDIT
(
AUDIT_ID NUMBER ,
ID NUMBER ,
EMP_NAME VARCHAR2(200),
SAL NUMBER,
MODIFICATION_DATE DATE,
CREATE_DATE DATE,
CREATED_BY VARCHAR2(200),
APPROVED_BY VARCHAR2(200)
);

【问题讨论】:

  • 您可以使用休眠环境或 JPA 侦听器。更多信息在这里baeldung.com/database-auditing-jpa
  • 我已经看到了链接,但它不起作用..我只能填充 T_TEST 表
  • 你用什么?恩弗斯?
  • 你试过@Audited注解吗? // 这是重要的部分 :) 访问快速入门部分docs.jboss.org/envers/docs
  • 那个baeldung教程。我遇到了错误

标签: java spring hibernate spring-boot


【解决方案1】:

使用hibernate-envers。它真的很容易集成。您希望审计的实体(即维护历史记录)将使用@Audited 进行注释。 Hibernate 将创建一个单独的审计表,并在每次更新/插入/删除时在其中插入一行。

Maven 依赖:

<dependency>
  <groupId>org.hibernate</groupId>
  <artifactId>hibernate-envers</artifactId>
</dependency>

例子:

@Audited
public class Zoo implements Serializable {

  private String name;
  private String address;

  @OneToMany(mappedBy = "zoo", cascade = CascadeType.ALL, fetch = FetchType.LAZY, orphanRemoval = true)
  @NotAudited // incase you don't any field to be audited, annotate them with @NotAudited
  private List<Animals> animals;

  }

【讨论】:

  • 你能给出我发布的上述示例的示例代码吗?我需要添加哪个实体@Audited
  • 如果您在application.properties 中设置了要更新的spring.jpa.hibernate.ddl-auto,则您不必自己创建审计表,如果您的实体类带有@987654327 注释,hibernate 将为您创建它@
  • spring.jpa.hibernate.ddl-auto=validate
  • 在我的 app.properties spring.jpa.hibernate.ddl-auto=validate 这能工作吗
  • 尝试将其更改为spring.jpa.hibernate.ddl-auto=update 并查看将创建表。
猜你喜欢
  • 2015-12-14
  • 2019-11-16
  • 2011-07-10
  • 2016-03-03
  • 2013-08-27
  • 2012-12-05
  • 2013-06-28
  • 2021-04-01
  • 1970-01-01
相关资源
最近更新 更多