首页
学习
活动
专区
圈层
工具
发布

Hibernate envers不更新带有注释的REVINFO中手动添加的列

Hibernate Envers是一个用于实现数据版本控制的开源框架。它可以在数据库中跟踪和存储实体对象的历史变更信息,包括创建、修改和删除操作。通过使用Envers,开发人员可以轻松地追踪和还原数据的历史状态,以及进行审计和数据分析。

在使用Hibernate Envers时,REVINFO表是用于存储每个实体对象的版本信息的特殊表。默认情况下,REVINFO表只包含一个自动生成的id列和一个timestamp列,用于记录版本的创建时间。然而,有时候我们可能需要在REVINFO表中手动添加一些额外的列,以满足特定的业务需求。

然而,Hibernate Envers的设计理念是尽量减少对REVINFO表的修改,以保持框架的简洁性和稳定性。因此,Envers不会自动更新REVINFO表中手动添加的列。这意味着,如果我们在REVINFO表中手动添加了一列,并希望在每个版本的创建时更新该列的值,我们需要自己编写代码来实现这个功能。

为了实现这个目标,我们可以使用Hibernate Envers提供的事件监听器机制。通过实现Envers提供的org.hibernate.envers.RevisionListener接口,我们可以在每个版本创建时拦截事件,并在事件处理方法中更新REVINFO表中手动添加的列的值。

以下是一个示例代码,演示了如何使用Envers的事件监听器来更新REVINFO表中手动添加的列:

代码语言:java
复制
import org.hibernate.envers.RevisionListener;

public class CustomRevisionListener implements RevisionListener {

    @Override
    public void newRevision(Object revisionEntity) {
        CustomRevisionEntity customRevisionEntity = (CustomRevisionEntity) revisionEntity;
        // 更新手动添加的列的值
        customRevisionEntity.setCustomColumn("custom value");
    }
}

在上述示例中,CustomRevisionEntity是一个自定义的实体类,用于表示REVINFO表中的每个版本记录。setCustomColumn()方法用于设置手动添加列的值。

为了让Hibernate Envers使用我们自定义的事件监听器,我们需要在Hibernate配置文件中进行相应的配置。具体配置方式可以参考Hibernate Envers的官方文档。

总结起来,Hibernate Envers是一个用于实现数据版本控制的框架,可以跟踪和存储实体对象的历史变更信息。在使用Envers时,REVINFO表是用于存储版本信息的特殊表。虽然Envers不会自动更新REVINFO表中手动添加的列,但我们可以通过实现Envers提供的事件监听器来手动更新这些列的值。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

用 @Audited 注解增强 Spring Boot 应用,打造健壮的数据审计功能

通过对实体的审计,不仅可以记录数据的新增、更新和删除操作,还可以实现对这些操作的详细跟踪。...此依赖项提供了Hibernate Envers的支持,它负责实体版本控制和审计功能。实体配置将@Audited注解应用于您希望审计的实体类。...审计表中的字段包括:REV: 修订号(递增)REVTYPE: 修订类型(插入、更新、删除)AUDITEDFIELD: 审计字段的值MODIFIEDBY: 进行修改的用户MODIFIEDDATE: 修改的日期和时间检索审计数据使用...它允许与实体的审计历史进行交互。findRevisions: 这是Hibernate Envers提供的方法,用于检索给定实体的所有修订记录。...在Hibernate Envers中,当为实体启用审计功能时,它会生成一个对应的审计实体,默认情况下带有后缀“_AUD”。这个审计实体会跟踪原始实体随时间的所有更改。

48710
  • hibernate5新特性展示

    摘要: 在hibernate5中,有了一些新的变动: 新引导 API Spatial/GIS 支持 Java 8 支持 扩展 AUTO id 生成支持 命名策略分离 属性转换器支持 更好的 在hibernate5...从hibernate的古老版本到现在,它一直支持用户按任意的顺序添加新的配置和关系映射,并允许我们在程序运行过程中查询获取相应的状态和映射信息。但这也意味着我们不能根据一些实时配置高效地建立映射信息。...我们使用的表或列没有明确指定一个使用的名称 2. org.hibernate.boot.model.naming.PhysicalNamingStrategy:用于转换“逻辑名称”(隐式或显式)的表或列成一个物理名称...整合了hibernate-envers 5. 集合数值,映射键值 6. 现在能够有效处理null值 7....更新的一部分.从用户的角度来看,这些一般只在涉及到配置部分时才会有所接触,此前应用程序直接将与不同的后端事务策略通过org.hibernate.Transaction有效工作.在5.0中,一定程度地支持已经添加进来

    1.6K40

    Spring Boot整合Ehcache实现缓存功能

    ; 3)@EnableCaching启动缓存注解(也就是说使项目内部的缓存相关的注解生效) 2、application.yml和ehcache.xml配置文件 配置文件中关于数据库配置这一块仅仅配置了开发模式...", storeDataAtDelete); hibernateProperties.setProperty("org.hibernate.envers.global_with_modified_flag...,这个名称就是ehcache.xml内的名称; 2)@Cacheable:应用到读取数据的方法上,即可缓存的方法,如查找方法:先从缓存中读取,如果没有再调 用方法获取数据,然后把数据添加到缓存中,适用于查找...适用于更新和插入; 4)@CacheEvict:主要针对方法配置,能够根据一定的条件对缓存进行清空。适用于删除。...id=1就可以查询到数据,这时候观察控制台或者日志就可以发现,查询的时候并没有去访问数据库,而是直接在缓存中查询了,至于更新和删除,道理是一样的。

    4.6K10

    什么是JPA?Java Persistence API简介

    像Hibernate ORM或EclipseLink这样的框架将该任务编码为库或框架,即ORM层。作为应用程序体系结构的一部分,ORM层负责管理软件对象的转换,以便与关系数据库中的表和列进行交互。...在Java中,ORM层转换Java类和对象,以便可以在关系数据库中存储和管理它们。 默认情况下,持久化对象的名称将成为表的名称,字段将成为列。设置表后,每个表行对应于应用程序中的对象。...Musician存在的原因是包含数据。这种类有时称为DTO或数据传输对象。DTO是软件开发的常见功能。虽然它们包含多种数据,但它们不包含任何业务逻辑。持久化数据对象是软件开发中普遍存在的挑战。...从那时起,SQL转换由框架处理,因此您永远不必离开面向对象的范例。 JPA中的元数据注释 清单3中的魔力是配置的结果,该配置是使用JPA的注释创建的。...CRUD操作 将类映射到数据库表并建立其主键后,即可拥有在数据库中创建,检索,删除和更新该类所需的一切。

    11.2K30

    如何完美解决 `could not execute statement; SQL ; nested exception is org.hibernate.exception.SQLGramm

    解决方案: 确保数据库中的表具有正确的主键和外键约束。 插入或更新数据时,确保满足表的约束条件。...通过 Hibernate 的 hbm2ddl.auto 设置重新生成表结构,或手动更新实体类与数据库一致。...# 在 application.properties 中添加 spring.jpa.hibernate.ddl-auto=update 2.4 SQL 语法错误 在使用原生 SQL 查询或自定义 JPQL...解决方案: 使用 SQL 日志查看实际生成的 SQL 语句,并手动在数据库中运行以检查错误。 调整 SQL 查询语句以符合数据库的 SQL 语法规范。...A:可以在 application.properties 中添加以下配置来启用 SQL 日志: spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql

    6K10

    参数校验这样写,就不会被辞退了。

    这里不校验,直接用,不怕引入sql注入吗?这里不校验下邮箱是否符合格式吗?这个判空也不写,不怕大量的空指针,服务熔断吗?..."。面对leader的拼命十三问,二胖心想试用期怕是有点难过哦?...JCP(Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。 JSR又是个什么东东列?...代码实现 如果项目的框架是 spring boot 的话,在 spring-boot-starter-web 中已经包含了 Hibernate-validator 的依赖(版本必须是2.3之前)。...2.3以后的版本 spring-boot-starter-web已经去除了这个依赖,需要手动引入 Hibernate-validator依赖,详细内容见官网描述   的、比如使用的是Jfinal框架(这个是个国产框架大多数人能都不知道)、或者soa调用参数校验的时候,这时候可以怎么使用列?

    71400

    二胖写参数校验的坎坷之路

    这里不校验,直接用,不怕引入sql注入吗?这里不校验下邮箱是否符合格式吗?这个判空也不写,不怕大量的空指针,服务熔断吗?..."。面对leader的拼命十三问,二胖心想试用期怕是有点难过哦?...JCP(Java Community Process) 是一个开放的国际组织,主要由Java开发者以及被授权者组成,职能是发展和更新。 JSR又是个什么东东列?...代码实现 如果项目的框架是 spring boot 的话,在 spring-boot-starter-web 中已经包含了 Hibernate-validator 的依赖(版本必须是2.3之前)。...2.3以后的版本 spring-boot-starter-web已经去除了这个依赖,需要手动引入 Hibernate-validator依赖,详细内容见官网描述 的、比如使用的是Jfinal框架(这个是个国产框架大多数人能都不知道)、或者soa调用参数校验的时候,这时候可以怎么使用列?

    44520

    SpringBoot系列教程JPA之新增记录使用姿势

    ,如何添加数据 通过本篇文章,你可以get到以下技能点 POJO对象如何与表关联 如何向DB中添加单条记录 如何批量向DB中添加记录 save 与 saveAndFlush的区别 <!...其他 到这里这个POJO已经创建完毕,后续的表中添加记录也可以直接使用它了,但是还有几个问题是没有明确答案的,先提出来,期待后文可以给出回答 POJO属性的类型与表中类型 mysql表中列可以有默认值,...要是手抖上面测试注释掉的那一行忘了注释,岂不是依然会跪?而且我希望是表中的默认值,直接在代码中硬编码会不会不太优雅?这个主动设置的默认值,在后面查询的时候会不会有坑?...从输出结果来看: 如果这个id对应的记录不存在,则新增 如果这个id对应的记录存在,则更新 不然这个注解可以主动指定id方式进行插入or修改,那么如果没有这个注解,插入时也不指定id,会怎样呢?...很遗憾的是直接抛异常了,没有这个注解,就必须手动赋值id了 ? 4.

    1.6K20

    Hibernate二级缓存提升性能(注解方式)

    在使用的时候直接从缓存的map中取,而不用连接数据库,从而提升性能。这种方式简单易行,但是map常驻服务器内存,并且在数据变更(增删改)的时候要手动更新map。...=debug(记录二级缓存的活动),实际发布的时候,注释掉,以免影响性能。...3、pom文件中引入相应jar包(Maven项目,如果还在手动添加jar包的,可以尝试使用maven) org.hibernate...ehcache的四种缓存并发策略如下: read-write (读写型) 提供Read Committed事务隔离级别 在非集群的环境中适用 适用经常被读,很少修改的数据 可以防止脏读 更新缓存的时候会锁定缓存中的数据...不锁定缓存中的数据 read-only (只读型) 适用从来不会被修改的数据(如参考数据) 在此模式下,如果对数据进行更新操作,会有异常 事务隔离级别低,并发性能高 在集群环境中也能完美运作 @Entity

    81220

    如何实现Java后端数据校验?看这篇就足够!

    嵌套验证 表示一个校验实体中还嵌套者另一个待校验实体,需要同时对他们进行校验 分组校验 添加校验注解的方式固然是方便的,但是如果一个实体对象在不同的业务中的校验规则不同的话,难道我们需要编写两个...Validator校验框架的使用,其中,username属性,表示只有新增/保存的时候,才会校验username属性,而email属性,无论是保存或者更新的得时候都会校验email属性,如果不指定groups...顾名思义,嵌套验证就是一个实体中的属性包含其他实体,在对当前实体做校验的同时,还要对其属性的实体进行嵌套验证,比如,我们现在有一个实体CreateRoomInfoVO,通过Java+Hibernate校验...Api请求vo实体,在实体的属性上添加校验规则,在API接收数据时添加@Valid注解,这时你的实体将会开启一个校验的功能。...在上图中,如果CreateRoomInfoVO实体的objectVOList属性不额外加注释,只有@NotNull,无论入参采用@Validated还是@Valid验证,从返回知道,我们传vipLevel

    14.3K72

    day29_Hibernate学习笔记_01

    注意:也可以不用在核心配置文件hibernate.cfg.xml中添加事务控制的配置,可以在测试类代码中直接添加事务控制代码,如下图所示: ? ?   哈哈,也添加成功了。...开发中:将hbm.xml映射配置到hibernate.cfg.xml中。 学习中:可以使用手动方式 addResource 或 addClass。...如果存在表结构,并且表结构与实体不一致,那么会修改表结构,即通过hbm映射文件更新表(添加)。会保留原有列。                     ...代理主键:在业务中,不存符合以上3个条件的属性,那么就增加一个没有意义的列,作为主键。 6.4、基本数据与包装类型 基本数据类型和包装类型对应hibernate的映射类型相同。...默认情况:hibernate生成insert或update语句,使用配置文件所有项             type        表中列的类型。

    1.4K20

    求求你别在用IF ELSE校验参数了

    JSR-303 是JAVA EE 6 中的一项子规范,后来的版本是Bean Validation 1.1(JSR-349),目前最新版本是Bean Validation 2.0(JSR-380),Hibernate...(springboot2.3版本已经移除hibernate-validator的依赖,需要手动引入) ?...0 @Valid 具体作用下面会列举 Hibernate Validator 附加的 constraint 注解 详细信息 @Length 被注释的字符串的大小必须在指定的范围内 @URL 根据RFC2396...Validator validator = validatorFactory.getValidator(); return validator; } a.对象校验 1.在对象中添加注解...@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果(将校验结果封装在BingdingResult对象中

    2.2K10

    求求你别在用IF ELSE校验参数了

    JSR-303 是JAVA EE 6 中的一项子规范,后来的版本是Bean Validation 1.1(JSR-349),目前最新版本是Bean Validation 2.0(JSR-380),Hibernate...(springboot2.3版本已经移除hibernate-validator的依赖,需要手动引入) ?...0 @Valid 具体作用下面会列举 Hibernate Validator 附加的 constraint 注解 详细信息 @Length 被注释的字符串的大小必须在指定的范围内 @URL 根据RFC2396...Validator validator = validatorFactory.getValidator(); return validator; } a.对象校验 1.在对象中添加注解...@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果(将校验结果封装在BingdingResult对象中

    1.9K20

    求求你别在用IF ELSE校验参数了

    JSR-303 是JAVA EE 6 中的一项子规范,后来的版本是Bean Validation 1.1(JSR-349),目前最新版本是Bean Validation 2.0(JSR-380),Hibernate...(springboot2.3版本已经移除hibernate-validator的依赖,需要手动引入) ?...0 @Valid 具体作用下面会列举 Hibernate Validator 附加的 constraint 注解 详细信息 @Length 被注释的字符串的大小必须在指定的范围内 @URL 根据RFC2396...Validator validator = validatorFactory.getValidator(); return validator; } a.对象校验 1.在对象中添加注解...@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果(将校验结果封装在BingdingResult对象中

    2K20

    Validator,就来这一篇吧

    JSR-303 是JAVA EE 6 中的一项子规范,后来的版本是Bean Validation 1.1(JSR-349),目前最新版本是Bean Validation 2.0(JSR-380),Hibernate...(springboot2.3版本已经移除hibernate-validator的依赖,需要手动引入) ?...0 @Valid 具体作用下面会列举 Hibernate Validator 附加的 constraint 注解 详细信息 @Length 被注释的字符串的大小必须在指定的范围内 @URL 根据RFC2396...Validator validator = validatorFactory.getValidator(); return validator; } a.对象校验 1.在对象中添加注解...@Valid注解即可(校验对静态变量不生效),在使用 @Valid 注解的参数后可以紧跟着一个 BindingResult 类型的参数,用于获取校验结果(将校验结果封装在BingdingResult对象中

    2.9K10

    使用 Java @Annotations 构建完整的 Spring Boot REST API

    在 Java 编程语言中,注解是一种语法元数据,可以添加到 Java 源代码中。Java 注释也可以嵌入到 Java 编译器生成的 Java 类文件中并从中读取。...当模型属性定义了延迟加载时,为了处理与使用 Jackson API 进行模型序列化相关的问题,我们必须告诉序列化器忽略 Hibernate 添加到类中的链或有用的垃圾,以便它可以管理延迟加载通过声明@JsonIgnoreProperties...声明带注释的元素不能是常见的 Spring 注释null。它也可以用在方法或参数中。注释指定数据库列的@Column名称以及表行为。可以设置此行为以防止其被更新或为空。...在下面的代码中,有一个@OneToOne注解来描述BusinessEntity类与Address类模型之间的关系。@JoinColumn注释指定在此关系中将被视为外键的列。...操作被认为是路径和 HTTP 方法的唯一组合。只有带有注释的方法@ApiOperation才会被扫描并添加到 API 声明中。一些处理程序或操作需要使用事务来确保数据完整性和一致性。

    4.2K20
    领券