在 2025 收官前,看清 Data + AI 的真实走向,点击查看 BUILD 大会精华版 了解详情
写点什么

版本化 JPA 实体

  • 2008-08-04
  • 本文字数:994 字

    阅读完需:约 3 分钟

Envers JBoss 的一个开源项目,最近它发布了 1.0.0 GA 版,在 Envers 的网站上这样阐述其自身的目标:> 。。。简化持久性JPA 类的版本化工作。若要对类或属性进行版本管理,只需在对应的类和属性上添加@Versioned 注解即可。对于每个版本实体,都有一张表与之相对应,这张表记录了实体所有的更改历史。这样一来,读取或查询历史数据就变得不费吹灰之力。

由于Envers 与Hibernate 及Hibernate Entity Manager 兼容,Hibernate 能运行的地方,Envers 就能运行。例如,Envers 可以独立运行,也可以在应用服务器中运行,还能与JBoss Seam 以及 Spring 协同工作。Envers 的当前版本提供的诸多特性中包括: - 对基本属性(strings, integers, longs…)的版本管理

  • 对基本属性构成的嵌入式组件的版本管理
  • 使用简单的、合成或嵌入式 id 对类进行版本管理
  • 对一对一单向或双向关联关系进行版本管理(单向关系中只针对关系主体的拥有者进行版本管理)
  • 对一对多单向或双向关联关系进行版本化(单向关系中只针对关系主体的拥有者进行版本管理)
  • 支持次级表(secondary tables)
  • 使用“修订实体(revision entity)”跟踪记录每个修订版本
  • 查询历史数据

尤其出色的是,1.0.0 GA 版对集合的变化也提供了修订版本管理,之前的预览版与 beta 版中都没有这项功能,例如: > 假设你有一个Person 实体和一个Address 实体,他们为双向多对一关系(每个人只有一个地址,几个人可以拥有相同的地址)。现在修改其中某个人的地址,那么新、旧地址所对应的persons 集合的内容就发生了变化。之前的预览版与beta 版都不会为Addresses(只针对Person)做修订版本管理,原因是数据库中的数据并没有发生变化(发生变化的是java beans 中的数据)。而现在,所有这三个实体来会有产生一个修订版本而记录在更改历史中。

如果出于某种原因需要关闭这个功能的话,只需要按下列代码修改一下配置就可以了: <property name="org.jboss.envers.revisionOnCollectionChange" value="false"></property>在未来的版本中,Envers 会支持对任何类型关联的版本管理,不再只局限于一对一或一对多。而且,它将只存储版本间差异,来达到节省空间的目的等等。Envers 是一个相当新的项目,目前尚还没引起广泛“追捧”,但它非常值得大家关注。以下资源可以帮助你进一步了解 Envers 的相关信息:

查看英文原文: Versioning JPA Entities

2008-08-04 14:45764
用户头像

发布了 88 篇内容, 共 274.1 次阅读, 收获喜欢 9 次。

关注

评论

发布
暂无评论
发现更多内容

网络攻防学习笔记 Day49

穿过生命散发芬芳

网络攻防 6月日更

Anaconda 如何安装 BeautifulSoup 环境

Qien Z.

6月日更

Python——计数器(Counter)

在即

6月日更

双非渣本后端,三个月逆袭字节,入职那天“泪目”了

Java架构师迁哥

Redis入门一:简介

打工人!

数据库 nosql redis 6月日更

冯 · 诺依曼结构原理及层次结构分析

若尘

计算机组成原理

窥见AI工业化开发黎明:华为云如何将AI进行到底

脑极体

三星T5 格式化成APFS

SamGo

学习 硬件产品

【Vue2.x 源码学习】第十九篇 - 根据 vnode 创建真实节点

Brave

源码 vue2 6月日更

大学生如何让更好的入门计算机?

Bob

入门 话题讨论 话题 大学生

堆与堆排序

wzh

Java 数据结构 算法 堆排序 数据结构与算法

现在后端开发都在用什么数据库存储数据?

Linux服务器开发

MySQL 数据库 后端 中间件 Linux服务器开发

电商系统微服务拆分设计

Lane

手写一个简单的SpringBoot Starter

赵镇

拆分电商系统为微服务

唐江

架构实战营

「SQL数据分析系列」8. 分组和聚合

Databri_AI

数据库 sql 大数据 存储 计算

架构实战营 模块六:课后作业

Ahu

架构实战营

架构实战营 模块六作业

netspecial

架构实战营

模块6课后作业

方堃

作为程序员,你会使用Notion吗?

Bob

程序员 Notion 笔记

韩信大招:一致性哈希

悟空聊架构

分布式 一致性hash 6月日更 hash算法

🌏【架构师指南】分布式事务(XA)与一致性算法(Paxos、Raft、Zab、NWR)

码界西柚

ZAB raft协议 paxos协议 6月日更

模块6 学习总结

TH

setTimeout(〒︿〒) 请原谅我一直以来对你的忽视

编程三昧

JavaScript 大前端 定时器 基础知识

如何应对不好回应的沟通场景?

石云升

读书笔记 沟通 6月日更

Linux之pwd命令

入门小站

Linux

排序算法之冒泡排序

xcbeyond

排序算法 冒泡排序 6月日更

架构实战营模块六作业

竹林七贤

前端 JavaScript 之『节流』的简单代码实现

编程三昧

JavaScript 大前端 js 防抖节流 代码实现

新一代数仓架构-Snowflake弹性数仓

一弦思华年

大数据 数据湖 云原生 OLAP 数仓

【21-11】PowerShell 特殊变量

耳东@Erdong

PowerShell 6月日更

版本化JPA实体_Java_Craig Wickesser_InfoQ精选文章