1背景 :在使用hibernate的过程中,遇到了联合主键的困境。
由于原有项目是原生的java语言写的,而现在需要使用hibernate重写。原有的数据库表的设计中,很多表中都是用了联合主键 ,因为这样的设计符合业务上的概念,而且原生的jdbc数据库访问也不存在使用联合主键的困难。
但是,现在一切变了,一方面,我们享受者hibernate的面向对象的变量;一方面,却要忧虑不能使用hibernate的原有功能时的无所是从。
我在网上搜集了一些讨论,结论是除非你真的精通hibernate,否则不要使用hibernate的联合主键功能,因为这会给你带来很多意外的烦恼。幸好,以前的项目也是我写的,因此,
我决定把数据库改了,原来正在运行基于原生java语言开发的项目也响应更改。
2 因此接下来要讨论如何改的问题,如何能够尽量不影响原来项目的运行,而又能以最小的工作量解决当前项目的困境呢,这就牵涉到了本文要讨论的概念了,
逻辑主键和业务主键—— 我的理解如下
逻辑主键---通俗的说,是给机器的,它的目的是让机器能够正确标识记录
业务主键----是给人(程序员)来理解的,它的目的是让我们更好的理解项目的设计思想,以便于开发。
举个例子:我原来的项目中 有2个表
sh_device 主键 dev_GUID
sh_maintain 主键 ma_dev_GUID, ma_order
在sh_maintain 中,使用了联合主键,其中ma_dev_GUID关联了sh_device的dev_