写点什么

版本化 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:45761
用户头像

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

关注

评论

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

编程培训学习零基础应该怎么选择呢

小谷哥

为什么vue3要选用proxy,好处是什么?

hellocoder2029

JavaScript

一比一手写迷你版vue,彻底搞懂vue运行机制

hellocoder2029

JavaScript

一个非常常见的问题:var、let和const

肥晨

11月月更 js6 js基础

JavaScript刷LeetCode拿offer-双指针技巧

Geek_07a724

JavaScript LeetCode

前端工程师leetcode算法面试必备-二分搜索算法(上)

js2030code

JavaScript LeetCode

前端工程师leetcode算法面试必备-二分搜索算法(中)

js2030code

JavaScript LeetCode

北京大数据培训学习怎么选

小谷哥

发布自己的第一个npm包

格斗家不爱在外太空沉思

npm nodejs 11月月更

BNBDao三三复制公排dapp系统开发

开发微hkkf5566

使用Vmware创建Centos7虚拟机(安装和配置网络环境、xshell连接、防火墙、yum仓库、磁盘挂载、重启命令)

A-刘晨阳

Linux 运维 vmware 11月月更

深度理解NodeJS事件循环

coder2028

node.js

云栖大会,一场边缘云计算的「超前瞻」之约

阿里云CloudImagine

云栖大会 边缘云

JavaScript刷LeetCode拿offer-滑动窗口

Geek_07a724

JavaScript LeetCode

深入理解Node.js的进程与子进程

coder2028

node.js

一文读懂Js中的this指向

hellocoder2029

JavaScript

前端工程师leetcode算法面试必备-二分搜索算法(下)

js2030code

JavaScript LeetCode

2022年在线招聘求职行业洞察

易观分析

招聘 在线

Vue基础知识整理【建议收藏】

何极光

Vue 基础

【云原生】内存数据库如何发挥内存优势

石臻臻的杂货铺

数据库 SPL 11月月更

深入剖析nodejs中间件

coder2028

node.js

Echarts实现全国地图展示

格斗家不爱在外太空沉思

JavaScript eCharts 11月月更

融云通信云服务,助力医疗招聘平台构建行业护城河

融云 RongCloud

通信 医疗 融云

Linux常用基础命令(巨全)

A-刘晨阳

Linux 运维 11月月更 基础命令

北京web前端学习哪个机构比较好

小谷哥

决策树-分类树

烧灯续昼2002

机器学习 决策树 sklearn 11月月更

Go语言入门11—接口

良猿

Go golang 后端 11月月更

TOGAF架构框架3-ADM架构开发技术

Marvin

架构 TOGAF ADM架构开发方法

怎么从容地拿捏时间?来自富兰克林的启示

无人之路

时间管理

如何构建并提高自己的核心竞争力?

老张

核心竞争力

JavaScript刷LeetCode拿offer-双指针技巧Medium篇

Geek_07a724

JavaScript LeetCode

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