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导入之时为佳.