写点什么

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

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

关注

评论

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

数据倾斜的产生和解决办法?

编程江湖

Java Collectors API实践

FunTester

Java API 测试开发 FunTester Collectors

博文推荐|深度解析如何在 Pulsar 中实现隔离

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

程序员如何应对职业天花板

石云升

职场天花板 职场经验 11月日更

直播预告|11.27(周六)观测云&思否联合举办的开发者线上沙龙巡演第3站来啦

观测云

直播 沙龙

Tapdata 在线研讨会:DaaS vs 大数据平台,是竞争还是共处?

MongoDB中文社区

mongodb

我滴个乖乖!首次公布Java10W字面经,Github访问量破百万

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

博文推荐 | Apache Pulsar 三大跨地域复制解决方案

Apache Pulsar

Java 架构 分布式 云原生 Apache Pulsar

【死磕Java并发】-----J.U.C之AQS:阻塞和唤醒线程

chenssy

11月日更 死磕 Java 死磕 Java 并发

在 JavaScript 中如何检查对象为空

编程江湖

公司刚来的阿里p8,看完我构建的springboot框架,甩给我一份文档

热爱java的分享家

Java 面试 程序人生 经验分享 P8

DPDK 网络协议栈-vpp-OvS-DDos-虚拟化专家之路

赖猫

Linux 网络协议栈 DPDK

头条观察 | 元宇宙成为必然趋势的三种可能

CECBC

Java线程的生命周期包括哪几种状态?

程序员万金游

java线程

学习Java需要掌握哪些技能?

程序员万金游

Java

2021年底Java最新学习路线图

程序员万金游

Java

激荡十年,从未来窗口 re:Invent 看云计算发展变迁 | Q推荐

亚马逊云科技 (Amazon Web Services)

数据库 云计算 云原生 re:Invent

封神总结!蚂蚁金服+滴滴+美团+拼多多+腾讯15万字Java面试题

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

为什么要学习linux内核源码以及如何学习Linux内核源码

赖猫

c++ Linux 运维 嵌入式 Linux内核

关于JAVA中顺序IO的基本操作

编程江湖

(文末福利)如果代码莫名其妙跑起来了,就不要去动它了……吗?

Zilliz

数据库

一物一码可追溯!看区块链如何帮助消费者

CECBC

JavaScript 数组展平方法: flat() 和 flatMap()

devpoint

11月日更 flat flatMap

天翼账号网关系统架构演进历程

架构 网关 亿级流量 双十一

顺丰科技 x StarRocks :双十一实时运单分析实践

StarRocks

数据库 大数据 数据分析 StarRocks

豪华阵容!13位专家力荐Spring5为企业级开发提供一站式方案

热爱java的分享家

Java 面试 程序人生 编程语言 经验分享

声网下一代视频引擎架构探索与实践

声网

音视频 视频处理 RTE 技术详解

Function Mesh:Serverless 在消息与流数据场景下的火花

Apache Pulsar

大数据 架构 云原生 Apache Pulsar pulsar社区

Python Qt GUI设计:QSpinBox计数器类(基础篇—15)

不脱发的程序猿

Python PyQt GUI设计 QSpinBox计数器类

博文推荐|腾讯专家深度解析 Apache Pulsar 五大应用场景

Apache Pulsar

架构 分布式 云原生 Apache Pulsar 消息中间件

活动预告|AICon全球人工智能与机器学习技术大会

第四范式开发者社区

机器学习 开源 OpenMLDB

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