2015-07-10 70 views
0

我必须设计一个表来存储一些远程数据。我通过Web服务获得的数据有一个候选键,两列的组合,但我看到很少的帖子,他们不鼓励在hibernate中使用复合键,而是推荐使用代理键。如果我使用组合键设计表,那么我可以直接更新数据,但如果我使用代理键,那么在更新之前我必须首先获取主键。我的问题是我应该使用哪一个组合键或代理键?休眠组合键或代理键

回答

1

说不复合键becasue ...

  • 他们是低效(取决于数据库)
  • 使用繁琐的参数,而不只是一个
  • 容易
  • 更多数量错误
  • 如果我们有多个列作为复合键,可能会导致数据重复联系

因此建议使用代理键。虽然它有其自身的缺点

  • 性能问题
  • 容易出错
  • 复制

与休眠的Java持久性陈述参考:

更多有经验的Hibernate用户独占使用saveOrUpdate();它更容易让Hibernate决定什么是新的和什么是旧的,尤其是在具有混合状态的更复杂的对象网络中。只有 独占saveOrUpdate()的缺点(不是很严重)是 ,它有时无法猜测实例是旧的还是新的 而不在数据库中触发SELECT(例如,当类是 映射到自然组合键和无版本或时间戳 属性。

限制的一些表现形式可以找到here

因此,在使用自然键时,如果使用自然键,并且使用替代键时最好使用它们。

+0

我必须更新超过一百万条记录,如果我使用代理键,那么我必须对所有记录进行选择和更新。有什么方法可以提高性能? – wolverine

+0

更新一百万条记录听起来像你可能想要这样做,而不休眠。 –