首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

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提供的事件监听器来手动更新这些列的值。

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

相关·内容

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.4K40

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.3K10

什么是JPA?Java Persistence API简介

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

10.1K30

如何完美解决 `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

1K10

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

这里校验,直接用,不怕引入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依赖,详细内容见官网描述   <groupId...、比如使用是Jfinal框架(这个是个国产框架大多数人能都不知道)、或者soa调用参数校验时候,这时候可以怎么使用

62600

二胖写参数校验坎坷之路

这里校验,直接用,不怕引入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依赖,详细内容见官网描述 <groupId...、比如使用是Jfinal框架(这个是个国产框架大多数人能都不知道)、或者soa调用参数校验时候,这时候可以怎么使用

38220

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

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

64720

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

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

1.3K20

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

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

13.2K72

day29_Hibernate学习笔记_01

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

1.1K20

求求你别在用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.9K10

求求你别在用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.7K20

求求你别在用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.7K20

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.6K10

Hibernate入门这一篇就够了

既然Hibernate是关于Java对象和关系数据库之间联系的话,也就是我们MVC数据持久层->在编写程序DAO层… 首先,我们来回顾一下我们在DAO层写程序历程吧: 在DAO层操作XML,...当插入数据时候,就将JavaBean对象拆分,拼装成SQL语句 当查询数据时候,用SQL把数据库表组合,拼装成JavaBean对象 也就是说:javaBean对象和数据表存在映射关系!...ORM是一种思想 O代表是Objcet R代表是Relative M代表是Mapping ORM->对象关系映射….ORM关注是对象与数据库关系 ?...我们来使用一下update()方法吧….既然是更新操作了,那么肯定需要设置主键设置主键,数据库怎么知道你要更新什么。...SQL:Struct query language 结构化查询语言 查询是表以及区分大小写】 HQL是面向对象查询语言,可以用来查询全部数据!

1.6K40

使用 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 声明。一些处理程序或操作需要使用事务来确保数据完整性和一致性。

3.4K20
领券