Hibernate如何控制数据历史版本?

问题描述

描述很长,请耐心看完。一个项目曾经碰到过的需求,一个对象可能有多个版本,但当前只是用一个,有效历史版本都必须保留,用纯数据库方式和代码控制的。上来问问大家有没有Hibernate,也就是面向对象设计上的方案。案例如下,纯属虚构:1、国家修改法规处罚标准,使得处罚标准和力度发生变化,比如:仿冒知名品牌获利罪1980年版,仿冒知名品牌获利1万以内,处以7~10年监禁;1990年版,仿冒知名品牌获利10万以内,处以5~8年监禁;2000年版,仿冒知名品牌获利20万以内,处以4~7年监禁,并处以双倍获利处罚;2010年版,仿冒知名品牌获利50万以内,处以3~5年监禁,并处以双倍获利处罚;2、具体犯罪记录罪犯A,1986年发现其当年触犯仿冒知名品牌获利罪,适用1980年版;罪犯B,1992年发现其1987年触犯仿冒知名品牌获利罪,适用1990年版;罪犯C,2004年发现其1993年触犯仿冒知名品牌获利罪,适用2000年版,但超过追诉期10年,罚款但不监禁;3、系统当前2011年,查询仿冒知名品牌获利罪时应显示2010年版,但对不同罪犯历史记录查询时,要显示其犯罪时所适用版本标准,以及调查发现期所真正施行的版本标准;补充:上述案例中,有很多种犯罪条款,每个犯罪条款都有不同的版本时间段、处罚条件和处罚标准。请问各位,这种系统如何基于模型来设计,尤其适用Hibernate持久化时,如何设计基础模型?谢谢!

解决方案

处罚条件和标准不统一的话, 很难用套到一个统一的模型里面. 业务逻缉简单还能应付过来, 随着业务逻缉越来越复杂, 附加在sql上面的逻缉越来越多, Schema冗余相信也越来越多. 这是违背使用Hibernate的初衷的~~~~那是自己找罪受了~~~~ 为避免了查询运行时再去分析适用条款的复杂性和潜在的性能问题, Criminal Record适当冗余判断结果, 把比对判断的业务逻缉放在Criminal Record导入之时为佳.

时间: 2024-09-14 19:54:51

Hibernate如何控制数据历史版本?的相关文章

Word 2003如何保存文档历史版本

  动画演示 文档历史版本-word2003文档无法保存"> 在"另存为"."打开"等对话框的左侧,存在一个"我的位置"栏,使用此栏可以节省访问文件夹的时间,更容易地访问一些文件夹中的文件.在一个对话框中更新"我的位置"栏后,这些更改将应用于包含"我的位置"栏的其他对话框. 默认情况下,"我的位置"栏包含指向"我最近的文档"."桌面"

搞懂.NET Framework 历史版本(2017年)

原文:搞懂.NET Framework 历史版本(2017年) 最近被.NET平台各种名词.以及各种版本弄得有些疑惑,开发和部署,对于开发平台版本选择是个基本问题,因此,花了些时间,学习汇总了有关.NET版本演进的历史. .NET简介 这个平台相信我们都知道,不过随着技术发展,现在的.NET平台也今非昔比. .NET平台类似Java平台,是微软于2000年推出的Windows操作系统的应用软件开发框架,发展至今形成巨大的技术栈,涉及多语言(支持C#.F#.VB.NET)多领域(Windows桌面

C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新)

原文:C# 语言历史版本特性(C# 1.0到C# 7.1汇总更新) 历史版本 C#作为微软2000年以后.NET平台开发的当家语言,发展至今具有17年的历史,语言本身具有丰富的特性,微软对其更新支持也十分支持.微软将C#提交给标准组织ECMA,C# 5.0目前是ECMA发布的最新规范,C# 6.0还是草案阶段,C# 7.1是微软当前提供的最新规范. 这里仅仅列个提纲,由于C# 5.0是具有ECMA标准规范的版本,所以选择C# 5.0作为主要版本学习,并专题学习C# 6.0,7.0版本新特性. C

Delphi历史版本介绍(二)从Delphi8到DelphiXE3

Delphi历史版本介绍(二)从Delphi8到DelphiXE3 Delphi 8       Delphi8是一个短命的版本,有点像微软的vista的感觉,没有很好的超越7,后来用被2005取代,很多人都是直接从7到D2005的,Delphi8就这样被消损在历史的烟尘中. 作为Delphi8周年的产物,好像还没有长熟就被请出了娘胎,继续袭承了VCL.CLX. 架构上做了一些调整和加强,但是很多开发者感觉稳定性远远不及D7.   Delphi 2005       这个版本还有一个面子叫做Di

为什么 Android 测试如此困难:历史版本

本文讲的是为什么 Android 测试如此困难:历史版本, 作为一种职业,程序员总是完全无视自己的历史. David West, <Object Thinking> 大约两年以前,我写了两篇文章 用于尝试回答这个问题:"为什么测试 Android 应用这么困难?"在这些帖子中,我提出是 Android 应用的标准架构使得测试如此困难的.这个对于 Android 应用测试困难性的解释提出了一个更深.更历史性的问题:为什么一个如此难以测试的架构,在当初会成为开发 Android

github-Android Studio 恢复历史版本问题

问题描述 Android Studio 恢复历史版本问题 我用Android Studio打开了Github上别人的项目(https://github.com/saulmm/Android-Material-Examples.git),需要看其历史版本,但Get按钮为灰色,如下图所示: 请问如何解决? 解决方案 在网站上能看到么?你有相关的权限么?换一个分支试试看 解决方案二: Android历史版本Android历史版本Android Studio中打包之后版本异常问题解析

《PostgreSQL 9.0性能调校》一一1.1 PostgreSQL历史版本的性能

1.1 PostgreSQL历史版本的性能 2005年11月,PostgreSQL发布了其8.1版本.该版本中包含了众多内部结构的改进,其中一些期望能够提高多个活动客户端在多处理器系统下的数据库性能.其结果是在处理沉重工作负荷时,数据库能力得到成比例的提高.在如今的硬件设备上进行的基准评测,突出地显示了其对先前版本的跨越.可以在http://suckit.blog.hu/2009/09/29/postgresql_history看到György Vilmos 对8.0版至8.4版的性能横向比较.

《R的极客理想—工具篇》—— 1.2 R的历史版本安装

1.2 R的历史版本安装 问题 在Linux Ubuntu上,如何安装不同版本的R? 引言 R语言已进入到了3.0的时代,但有些第三方的R包还处于2.15的状态,没有升级,如RHadoop等.我们要用这些R包的时候,就需要指定版本的R软件.对于Windows来说,这是很简单的操作,只要安装不同的(.exe)文件就行了:对于Linux系统来说,就不那么容易了,需要我们手动进行配置.不熟悉Linux系统的同学,在这里就很容易卡住.所以,本节就讲一下如何在Linux Ubuntu系统中安装R语言软件包

Delphi历史版本介绍(一)从Delphi1到Delphi7

Delphi历史版本介绍(一)从Delphi1到Delphi7        Pascal是一种计算机通用的高级程序设计语言.它由瑞士Niklaus Wirth教授于六十年代末设计并创立.        TurboPascal语言是编译型程序语言,它提供了一个集成环境的工作系统,集编辑.编译.运行.调试等多功能于一体.Pascal有5个主要的版本,分别是UnextendedPascal.Extended Pascal.Object-Oriented Extensions to Pascal.Bo