BT

如何利用碎片时间提升技术认知与能力? 点击获取答案

版本化JPA实体

| 作者 Craig Wickesser 关注 0 他的粉丝 ,译者 张龙 关注 14 他的粉丝 发布于 2008年8月5日. 估计阅读时间: 3 分钟 | AICon 关注机器学习、计算机视觉、NLP、自动驾驶等20+AI热点技术和最新落地成功案例。
EnversJBoss的一个开源项目,最近它发布了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中的数据)。而现在,所有这三个实体来会有产生一个修订版本而记录在更改历史中。
如果出于某种原因需要关闭这个功能的话,只需要按下列代码修改一下配置就可以了:


在未来的版本中,Envers会支持对任何类型关联的版本管理,不再只局限于一对一或一对多。而且,它将只存储版本间差异,来达到节省空间的目的等等。Envers是一个相当新的项目,目前尚还没引起广泛“追捧”,但它非常值得大家关注。以下资源可以帮助你进一步了解Envers的相关信息:

查看英文原文:Versioning JPA Entities

评价本文

专业度
风格

您好,朋友!

您需要 注册一个InfoQ账号 或者 才能进行评论。在您完成注册后还需要进行一些设置。

获得来自InfoQ的更多体验。

告诉我们您的想法

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我
社区评论

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

允许的HTML标签: a,b,br,blockquote,i,li,pre,u,ul,p

当有人回复此评论时请E-mail通知我

讨论

登陆InfoQ,与你最关心的话题互动。


找回密码....

Follow

关注你最喜爱的话题和作者

快速浏览网站内你所感兴趣话题的精选内容。

Like

内容自由定制

选择想要阅读的主题和喜爱的作者定制自己的新闻源。

Notifications

获取更新

设置通知机制以获取内容更新对您而言是否重要

BT