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

使用spring数据jpa和hibernate进行审计

荀子轩
2023-03-14

我有一个带有spring Boot(v2.3.3)和spring数据的spring web应用程序。我的评估表包含以下列:

  1. Id

我的用例是表中名称和地址的任何更改评估应该创建一个新行,版本以相同的id递增。

因此,基本上只有当地址或姓名更新时,才能在评估表中插入新记录。下面是一个示例:

现有记录:

 Id       - 23
 Name     - John
 Address  - Southend
 Version  - 1

例如,名称已更新为Ryan,应该有两行,如下所示:

 Id       - 23
 Name     - John
 Address  - Southend
 Version  - 1

 Id       - 23
 Name     - Ryan
 Address  - Southend
 Version  - 2

因此,基本上,任何名称和地址的变化都应在评估表中进行审计,版本应递增。

我见过用于审计的Hibernateenvers,但需要创建一个新的审计表,因此我不能将其插入评估表中,也不知道如何生成版本号。

我可以通过编程的方式编写html" target="_blank">代码来实现这一点,但是还有其他可用的审计工具可以实现吗?

提前谢谢

共有3个答案

武博艺
2023-03-14

如果支持trigger,请尝试trigger,因为它将涵盖直接从DB更新的案例。

孟昆
2023-03-14

主实体应该有Id、名称、地址(而不是版本)列。你应该把@Audit放在实体上。之后,应该生成数据库表脚本(例如,请参见org.hibernate.tool.hbm2ddl.SchemaExport中的方法main)。您将在脚本中看到main和archive表(带有_aud后缀)。它将包含Id、姓名、地址和版本。rev字段是您的版本。当您在主实体中将名称更改为Ryan并提交时,envers会自动向存档表中添加一个新条目。

东门修能
2023-03-14

我不确定你的期望是什么。你为什么要用工具?就像恩弗斯。

这个问题与自动化和数据库有关,所以首先考虑的是触发器。

也许最简单也是最好的方法就是写一个PostUpdateEventListener。

public class VersionUpdateEventListener
    implements PostUpdateEventListener {
 
@Override
public void onPostUpdate(
        PostUpdateEvent event) {

        /*  
        1. getOldState() and getState() 
        2. check updated values
        3. update version +1 or not
        */

}
...

或者使用hiberNate@PostUpdate注释。

我相信你会在docs/google中找到它的详细信息。

 类似资料:
  • 问题内容: 我正在为项目使用Spring Data JPA和Spring Boot。 我对对象(创建/更新/删除)有审计要求。我可能还需要获取特定对象的审核修订。我已经在网上检查过Spring Data Envers无法获得修订并且不跟踪删除? 所以我的问题是: 1)我们可以将Hibernate Envers与Spring数据JPA集成吗? 2)我们有本机查询,HQL和Spring数据JPA更新/

  • 由于我是审计新手,请让我了解以上问题。 谢谢你。

  • 我目前正在从事一个利用Spring数据Neo4j的项目。每当创建节点时,我都希望创建一个包含创建日期和用户的引用审核节点。 我提出的一个解决方案是编写一个AOP方面,它与我的服务层的create方法挂钩。这对于没有级联的实体很好,但是级联的实体呢?它们没有在我的服务层中显式传递,因此我的AOP类不会拦截它们。JPA中是否有类似实体侦听器的概念,或者如何连接到该机制中?

  • 我挣扎了两天试图解决这个问题,我不知道我还能做什么。在我将< code>@Audit包含在实体中之前,我的系统工作得非常好。当然,我在。pom文件。 我已经尝试过这些帖子: Hibernare envers Audit with Spring data JPA 和 Spring Boot Spring-data-enverHibernatejava.lang.NoSuch方法错误:org.hibe

  • 问题内容: 是否可以使用Spring Data JPA(由Hibernate作为JPA提供者支持)并同时直接使用Hibernate? 问题是,当我使用JpaTransactionManager时,无法使用检索当前会话。当我切换到HibernateTransaction Manager时,JPA存储库无法提交更改。 这是我的Spring上下文的一部分(在该上下文中,我无法使用直接的Hibernate

  • 我知道SpringDataJPA使用Hibernate,但是,我有一些问题需要澄清。 > 与使用hibernate会话和HQL相比,使用@Query编写自定义查询有哪些优势? 使用SpringDataJParepository查询方法和使用HibernateHQL之间有什么性能差异吗? 我在这里看到了其他类似的问题,他们没有回答这些问题。