写点什么

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

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

关注

评论

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

信仰

小天同学

人生 个人成长 思考 读书感悟 信仰

Redis源码之常用数据结构和函数

心平气和

redis

关于CodeReview的一些思考

Yezhiwei

我也曾对架构师的力量一无所知

曲水流觞TechRill

基于vue(element ui) + ssm + shiro 的权限框架

吴邪

婚姻就是合伙开公司,各自做好自己的工作很重要

鼎玉谷

管理 婚姻 公司 付出 人情

技术人赚钱的9个路线

品牌运营|陆晓明

副业 赚钱 技术人 码农 生财有术

对你来说,阅读是另一种生活的方式吗?

叶小鍵

如何对Code Review的评论进行分级

宝玉

代码审查 Code Review

习惯与惯性

伯薇

个人成长 习惯 习惯养成 提升能力

瞎琢磨先生の常用的 linux 命令

瞎琢磨先生

Linux Shell

金融「中台」十宗罪

FinClip

中台 企业中台 业务中台

JAVA小抄-000-初始

NoNoGirl

Java

赚钱的6个层次

品牌运营|陆晓明

创业 技术人 赚钱思维 层次 商机

开通InfoQ写作平台测试

ytl

关于沟通成本的一些认知

Geek_reg5m9

项目管理 软件开发

Hello World !

ATGU:阿宝哥

Java Hello World ! Info

年轻人的世界

boyzcl

年轻人 系列

[读书随笔]从哲学上的问题分类看TDD

老狗

哲学 TDD

准备重读测试驱动开发

escray

学习 CSD 认证实战营

重新认识Go语言中的slice

麻瓜镇

Go 语言

详解iOS性能优化,安装包瘦身

Usama Bin Laden

ios 源码分析 性能优化 性能 原理

系统的伸缩性以及扩展性设计

Janenesome

读书笔记 程序员 架构

瞎琢磨先生の好物推荐(软件/网站)

瞎琢磨先生

读懂才会用 : Redis的多线程

小眼睛聊技术

Java redis 学习 程序员 编程语言 后端

在今天种下一棵树

陈医僧Ethan

感悟 育儿

关于「后浪」,ta 们在说什么?

boyzcl

年轻人 系列 后浪

如何利用数据异构实现多级缓存或者数据迁移

松花皮蛋me

缓存 分布式 分库分表

UITableView 手势延迟导致subview无法完成两次绘制

AlienJunX

新人工作的时候遇到问题怎么办

波波

学习 编程 职场 新人

Redis学习笔记(基础命令)

编程随想曲

redis

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