首页
学习
活动
专区
工具
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提供的事件监听器来手动更新这些列的值。

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

相关·内容

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

    最近端午好久没有和二胖聚一聚了,于是约了二胖到人民广场去宰他一顿,正好最近他跳槽加薪了。 我:二胖听说你最近跳槽了,并且还是从传统软件公司跳到了互联网公司,工资是不是涨了一点啊,今天你请客哈。 二胖:别说了,工资是涨了点,但是性价比反而变低了,以前到点就下班,现在下班到家都快12点了。 我:新公司怎么样还适应吗?除了上班时间久点。 二胖:哎,这个还真稍微有点不适应,这不是刚进去没啥事,leader就给我安排了一个简单的用户保存功能,原来以前公司个把小时就做好了的功能,在这新公司硬是折腾了两三天,真是苦不堪言。我改了好几个版本最终leader才满意的点了点头。

    02

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

    最近端午好久没有和二胖聚一聚了,于是约了二胖到人民广场去宰他一顿,正好最近他跳槽加薪了。 我:二胖听说你最近跳槽了,并且还是从传统软件公司跳到了互联网公司,工资是不是涨了一点啊,今天你请客哈。 二胖:别说了,工资是涨了点,但是性价比反而变低了,以前到点就下班,现在下班到家都快12点了。 我:新公司怎么样还适应吗?除了上班时间久点。 二胖:哎,这个还真稍微有点不适应,这不是刚进去没啥事,leader就给我安排了一个简单的用户保存功能,原来以前公司个把小时就做好了的功能,在这新公司硬是折腾了两三天,真是苦不堪言。我改了好几个版本最终leader才满意的点了点头。

    00

    实战:Bean的数据完整性验证方法| 从开发角度看应用架构11

    Java应用程序将数据存储在Java对象中。这些Java对象通过网络,作为参数传递给方法,并存在于Java EE应用程序的不同层中。为了保持数据完整性,数据验证是应用程序逻辑的主要要求。开发人员需要在应用程序的不同层中编写数据验证代码以进行数据验证,这容易出错并且非常耗时。提供bean验证API规范是为了避免代码重复并简化数据验证。 Bean验证是一种通过使用可以应用预定义约束的内置和自定义注释来验证Java对象中的数据的模型。 Bean验证对于Java EE和Java Web应用程序的所有层都是通用的。 Java在JSR 349中提供了bean验证1.1 API .JPA通过bean验证API支持实体类的运行时验证。 JBoss EAP完全符合JSR 349。

    03

    Mybatis和MybatisPlus:数据库操作工具的对比

    MyBatis是一个开源、轻量级的数据持久化框架,是JDBC和Hibernate的替代方案。MyBatis内部封装了JDBC,简化了加载驱动、创建连接、创建statement等繁杂的过程,开发者只需要关注SQL语句本身。MyBatis支持定制化SQL、存储过程以及高级映射,可以在实体类和SQL语句之间建立映射关系,是一种半自动化的ORM实现。其封装性低于Hibernate,但性能优秀、小巧、简单易学、应用广泛。MyBatis前身为IBatis,2002年由Clinton Begin发布。2010年从Apache迁移到Google,并改名为MyBatis,2013年又迁移到了Github。MyBatis的主要思想是将程序中的大量SQL语句剥离出来,使用XML文件或注解的方式实现SQL的灵活配置,将SQL语句与程序代码分离,在不修改程序代码的情况下,直接在配置文件中修改SQL语句。

    01
    领券