QCon 演讲火热征集中,快来分享技术实践与洞见! 了解详情
写点什么

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

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

关注

评论

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

聊聊MySQL全局锁

架构精进之路

MySQL 6月日更

从天而降的AI“青云梯”,开发者们准备好了吗?

白洞计划

【译】JavaScript 代码整洁之道-注释篇

KooFE

JavaScript 大前端 代码注释 6月日更 整洁代码

【环球网】博睿数据CEO冯云彪:做好生态链企业的适配工作

博睿数据

博睿数据 博睿数据数据链DNA 生态链

拍乐云运维专家受邀QECon大会,畅谈多云环境伸缩实践

拍乐云Pano

极光开发者周刊【No.0604】

极光JIGUANG

程序员 开发者 IT行业

架构实战营模块5作业

En wei

架构实战营

【得物技术】JS资源分包

得物技术

CSS 大前端 js 版本 页面

区块链技术为版权保护与运营提供科技支撑

CECBC

机器通用运行框架抽象

型火🔥

架构 微服务 抽象 中间件 机器

深入理解iOS图文混排原理并自定义图文控件

Geen练

图文混排 iOS Developer iOS 知识体系

MySQL基础之二:SQL语句介绍与使用

打工人!

MySQL sql查询 6月日更

【立刻报名】加速开发 Perforce on Tour China 2021-龙智

龙智—DevSecOps解决方案

模块五- 课后作业

Presley

架构实战营 #架构实战营

区块链—重构新商业体系和全新商业生态环境

CECBC

【Vue2.x 源码学习】第四篇 - 对象的深层劫持

Brave

源码 vue2 6月日更

理解【Apache Zookeeper】

awen

zookeeper

Nacos-- docker搭建

是老郭啊

Docker nacos

Kubernetes手记(1)- Kubernetes概述

雪雷

k8s 6月日更

网络攻防学习笔记 Day35

穿过生命散发芬芳

网络攻防 6月日更

python——格式化输入输出与截取字符串

在即

6月日更

《原则》(四)

Changing Lin

全栈程序员这个月写了啥代码?

程序员鱼皮

Java JavaScript 大前端 后端 全栈

Nacos--简介

是老郭啊

微服务 nacos 服务注册与发现

区块链作为“信任的机器”,将改变社会价值的传递方式

CECBC

浅析「扣减库存」的方案设计

悟空聊架构

分布式 秒杀 电商 6月日更 库存

你有没有 996 ?你要不要 955 ?

escray

学习 极客时间 朱赟的技术管理课 6月日更

博睿数据重塑APM,引领IT运维新标杆

博睿数据

博睿数据 数据链DNA 服务可达

算法如何促成亿级别扶持曝光视频?爱奇艺Budget Pacing智能扶植系统实践

爱奇艺技术产品团队

架构 推荐 算法 广告 扶植

数字中国的视觉进阶:ISP的来处与归途

脑极体

“微博评论”高性能高可用计算架构

白发青年

架构实战营

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