总觉得Hibernate影响设计思路
玩hibernate有些日子了,但一直没敢在大型项目里用,主要是有种感觉:hibernate对设计思路有很大的干扰。
说个具体的例子:
很多应用都要求记录某一个业务对象的变更的历史,比如说,一个issue-tracking系统里,对issue的每一个处理步骤都要有纪录。这时,数据库通常设计为一个主表和若干个属性表,主表中保存业务对象不会变的属性,例如ID等等,属性表中记录经常更新的属性,两个表用主表ID相关联。若属性发生的修改,主表中不会变化,而属性表中会加入一个新的纪录,纪录中保存新的属性值、创建时间、创建人等等。
这样的设计应该是很常用的,但是若使用hibernate来实现,总觉得相当别扭。特别感觉OR-Mapping似乎对业务逻辑设计有很大的影响。比如:
理想的方法,应该是把整个业务对象表达成一个类(包括在主表中的属性和在属性表中的属性)。可是使用hibernate,如何做这种mapping?
如果把一些属性单独抽象成类,,这个属性类的实例作为主类的一个属性保存。这样对hibernate实现倒是简单了,只要一个one-to-many影射就好,但是这样业务逻辑表达上就严重不爽了。
不知道有没有DX处理过这类问题?