写点什么

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

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

关注

评论

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

Graylog部署文档

勤而行之

Linux 开源 工具 日志分析

低代码是什么鬼

Jeff Kit

低代码 全栈 开发

一次线上服务高 CPU 占用优化实践

挖坑的张师傅

性能优化 JVM cpu

pip 配置路径要死记硬背?

风起帆扬了

Python Linux windows pip

Java并发编程基础--volatile

Java收录阁

volatile 线程

Redis学习笔记(字符串类型)

编程随想曲

redis

Kubernetes 将迎来首个 LTS 版本

倪朋飞

Kubernetes 容器 微服务

有节制的设计

胖鱼2号

微信 设计 無印良品

我们有来生吗?

Janenesome

读书 碎碎念 猎奇

一次生产事故导致系统崩溃的原因排查过程

hellocj

乞丐版英制单位转换

escray

学习 CSD 认证实战营

取舍与可测试

孙苏勇

产品 产品设计 产品开发

程序员大佬怎么跳槽?

程序员干货站

Python 人工智能 程序员 后端

面试考试可用,十大排序算法

我不自豪谁志豪

学习 面试 算法

Flutter引擎源码解读-内存管理篇

Geek_70xtik

flutter ios android 跨平台 dart

理解 KL 散度的近似

Neil

人工智能 学习 Deep learning Machine Learning

JAVA 程序展示时间与数据表保存的时间相差了 13 个小时!

我不自豪谁志豪

MySQL 学习 后端

字节流(InputStream/OutputStream)

Howe

Java 工作流

python 之 「奶茶名字」的词云展示

小匚

Python python 爬虫 python教程

利用goaccess分析nginx日志

Megatron7

nginx Linux

回"疫"录(8):我怀疑我病了

小天同学

疫情 心理 回忆录 现实纪录 纪实

如何在“写作平台”做一个读者

小天同学

思考 写作平台 建议 读者 阅读量

七大查找算法,面试考试皆可用

我不自豪谁志豪

Java 面试 算法

聊聊我的程序员下属

程序员干货站

Python 人工智能 程序员 程序人生

Bash 的4种运行模式

Megatron7

bash Linux DevOps Shell

《零基础学Java》 FAQ 之 1-HelloWorld程序发生了ClassNotFound错误怎么解决

臧萌

Java Hello World !

快捷考勤打卡设置

Megatron7

ios

《零基础学Java》 FAQ 之 2-Java版本那点事儿

臧萌

Java

书籍推荐

蛤蟆先生

读书

1分钟系列-Elastic Stack(ELK)简介

Yezhiwei

Logstash Kibana ELK

maven私服搭建

kcnf

maven

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