我必须设计一个用于存储某些远程数据的表。我通过Web服务得到的数据有一个候选键,两列的组合,但我看到很少有帖子,他们不鼓励在hibernate中使用复合键而是建议使用代理键。如果我使用复合键设计表,那么我可以直接更新数据,但如果我使用代理键,那么我必须在更新之前先获取主键。我的问题是我应该使用哪一个,复合键还是代理键?
答案 0 :(得分:1)
对复合键说不,因为......
因此建议使用代理密钥。虽然它有其自身的缺点
如 Java Persistence with Hibernate 参考:
中所述更有经验的Hibernate用户专门使用saveOrUpdate();它的 更容易让Hibernate决定什么是新的,什么是旧的, 特别是在具有混合状态的更复杂的对象网络中。该 只有(不是很严重)独有的saveOrUpdate()的缺点是 它有时无法猜测实例是旧的还是新的 不在数据库中触发SELECT - 例如,当一个类是 使用自然复合键映射,没有版本或时间戳 属性。
可以找到限制的一些表现形式here。
因此,在相关时使用自然键,并在使用时更好地使用代理键。