相关疑难解决方法(0)

Hibernate:复合PK与Surrogate PK的观点

据我所知,每当我在JPA/Hibernate实体内的Long字段上使用@Id和@GeneratedValue时,我实际上使用的是代理键,我认为这是一种非常好的方法来定义主键,考虑到我不是 - 使用复合主键的良好体验,其中:

  1. 有超过1个业务价值列组合成为一个独特的PK
  2. 复合pk值在表详细信息中重复
  3. 无法改变复合PK内部的业务价值

我知道hibernate可以支持这两种类型的PK,但我不知道我之前与经验丰富的同事聊天,他们说复合PK在执行复杂的SQL查询和存储过程进程时更容易处理.

他们继续说,当使用代理键时,在加入时会使事情变得复杂,并且在使用代理键时无法做某些事情时有几种情况.虽然我很抱歉我不能解释这里的细节,因为当他们解释时我还不够清楚.也许下次我会提供更多细节.

我目前正在尝试做一个项目,并希望尝试代理键,因为它不会在表之间重复,我们可以更改业务列值.而当需要一些商业价值组合的独特性时,我可以使用类似的东西:

@Table(name="MY_TABLE", uniqueConstraints={
    @UniqueConstraint(columnNames={"FIRST_NAME", "LAST_NAME"}) // name + lastName combination must be unique
Run Code Online (Sandbox Code Playgroud)

但由于之前关于复合键的讨论,我仍然存在疑问.

你能分享一下这方面的经验吗?谢谢 !

java database database-design hibernate

5
推荐指数
1
解决办法
4951
查看次数

标签 统计

database ×1

database-design ×1

hibernate ×1

java ×1