产品战略专家梁宁确认出席AICon北京站,分享AI时代下的商业逻辑与产品需求 了解详情
写点什么

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

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

关注

评论

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

翻译: Effective Go (7)

申屠鹏会

翻译 Go 语言

鲲鹏一粤,智算万里

脑极体

MEDO 项目开发中遇到的问题汇总

陈皮

Spring如何选择类构造器

申屠鹏会

翻译 Go 语言

毕玄大佬的分享以及给我的感悟

白色蜗牛

Java 程序员 技术 职场 架构师

真正的异步API网关Agate

dinstone

Async API Gateway

MySQL 基准测试

多选参数

MySQL

如何学习一个框架?

云帆

翻译: Effective Go (6)

申屠鹏会

翻译 Go 语言

学习技术先从学会使用搜索引擎开始

我是程序员小贱

1 学习性能优化的要点

我是程序员小贱

Docker搭建PHP+Nginx+MySQL+Redis

书旅

Docker 镜像 lnmp

Elasticsearch学习

张明森

troubleshoot之:使用JFR分析性能问题

程序那些事

Java 性能分析 jfr

你生日那天的宇宙什么样子知道?我全部给你吧!

我是程序员小贱

为什么考研,考研能给你带来什么?说说我的感受!

我是程序员小贱

docker入个门

书旅

Docker 容器 Dockerfile

解析 hashMap 源码之基本操作 get

shengjk1

Java hashmap

解析 HashMap 源码概括

shengjk1

Java hashmap

平均负载是什么?

我是程序员小贱

Rust特征与泛型区别点

编号94530

rust 泛型 封装、继承、多态

华为的“少年天才”攀登者,出发向智能存储的“奥林帕斯山”

脑极体

【DevOps】我们忽视了Daily Build(每日构建)吗?

Man

DevOps jenkins 每日构建

Apache Mina和Netty的历史

dinstone

阿里、力扣、政采云的15位专家分享前端面试与招聘视角

三钻

面试 大前端

让你起飞的20个Linux命令骚操作

我是程序员小贱

高效程序员的45个习惯:敏捷开发修炼之道(1)

石云升

读书笔记 敏捷开发

如何隐藏你的数据库密码

Rayjun

安全 服务器

1 时间复杂度总结

我是程序员小贱

敏捷到底是个什么鬼?

刘华Kenneth

程序员 敏捷 change

解析 HashMap 源码之基本操作 put

shengjk1

Java hashmap

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