写点什么

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

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

关注

评论

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

web安全之CSRF

喀拉峻

网络安全

在 Ubuntu 上安装使用极狐GitLab Runner

极狐GitLab

CI/CD runner 极狐GitLab

数字人民币生态体系进一步完善 试点场景加速拓展

CECBC

【AI最前线】精准优质-资讯|分享|热议第43期

百度大脑

人工智能

如何提升工作意义感?

石云升

28天写作 职场经验 12月日更

LongAdder解析

程序员历小冰

28天写作 并发’ 12月日更

Python Qt GUI设计:QTabWidget、QStackedWidget和QDockWidget容器控件类(提升篇—2)

不脱发的程序猿

Python qt PyQt GUI设计 容器控件类

5.《重学JAVA》--编码规范

杨鹏Geek

Java 25 周年 28天写作 12月日更

JavaScript中的这些内置对象

你好bk

JavaScript 大前端 数组 html/css 12月日更

声网 X 远程超声:实时音视频解决基层“看病难” 推动医疗资源均衡化

声网

人工智能 音视频

大白话解析 MySQL 中的 MCCC 机制

悟空聊架构

MySQL MVCC 28天写作 悟空聊架构 12月日更

从航海贸易到元宇宙,从公司制到DAO

CECBC

模块一学习总结

Only

「架构实战营」

36 K8S之角色控制访问

穿过生命散发芬芳

k8s 28天写作 12月日更

Python Qt GUI设计:5种事件处理机制(提升篇—3)

不脱发的程序猿

Python qt PyQt GUI设计 事件处理机制

数研所已实现在数字人民币中积极探索区块链应用

CECBC

被寄予厚望的区块链在数据交易中能发挥的作用是什么?

CECBC

xxxx

guangbao

IT 好文&好课分享

hackstoic

List 去重的 6 种方法,这个方法最完美!

王磊

【LeetCode】字母异位词分组Java题解

Albert

算法 LeetCode 12月日更

AI安全领域的“雨山机车大赛”,改变了什么?

脑极体

如何“对抗”听众的短时记忆

将军-技术演讲力教练

共享

mtfelix

28天写作

非专业的系统安全规范

张老蔫

28天写作

同程旅行 IAST 落地实践

火线安全

DevOps DevSecOps 漏洞扫描 漏洞分析

全员客户成功

boshi

随笔杂谈

模块一作业

撿破爛ぃ

「架构实战营」

【架构师训练营】模块一作业

樰巳-堕~Horry

架构实战营 「架构实战营」

2021年度人工智能最佳产品TOP10!百度飞桨EasyDL再获业界认可

百度大脑

人工智能

架构实训营

ren

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