hibernate使用必须注意以下问题:
关系型数据库与面向对象的冲突
- 范式上的冲突,例address面向对象思考的话你要分成province city address zipcode等字符,那么关系数据库上我们设计一般只是将address设置成一个字段。
- 面向对象的设计模式中子类的的表示。我们关系数据库中并没有表之间的继承关系
- 关系数据库的记录集是否相等判断是通过主键判断,但是面向对象的判断是通过equals和==去判断相等。
- 关系模式当中我们会为每一张表多创建一个自动增长的标识列,但是面向对象的模式设计这个列确是不需要的。
- 例如是many to many的关系,我们在面向对象的时候会为例个例多增加一个字段例private set products去印象另一张表。这一个例在面向对象设计思考时也是不必要的。
- 面向对象访问两层的数据你可能需要使用搜索串aUser.getBillingDetails().getAccountNumber()这样经营两次的搜索才能得到你想要的,但是这样却使用的两次的数据库IO。但是像这样的语句如果你直接使用join两个表,一句SQL语句就能达到相同的目标。所以这边是否有面向对象的效率问题呢?
- 基于以上问题,直接选择面向对象的数据库是否是解决的方案呢?主要是由于面向对象数据库并没有被广泛的商用,并且也没有被快速使用的趋势。所以我们还是选择普通的关系数据库。