【问题标题】:@Id annotation in JPA and HibernateJPA 和 Hibernate 中的 @Id 注释
【发布时间】:2016-07-16 11:28:04
【问题描述】:

如果我不想自动生成主键,我想提供带有表第一列的 ID 作为主键。

2 A
4 B
7 D
13 E

...

我希望第一列 2,4,7,13 成为表的主键。我应该只使用@Id 来做注释吗?

@Entity
public class Code {
   @Id
   @Column(unique=true)
   private int id;

   ...
}

或者,如果使用@Id,主键将始终自动生成,而不是使用第一列,在这种情况下?

【问题讨论】:

  • 你不需要unique=true,如果你使用@Id

标签: java hibernate jpa


【解决方案1】:

@Id 只会声明主键。它不会插入生成的值。如果您使用@GeneratedValue,那么它将生成该字段的值。

【讨论】:

  • 主键一般应该自动生成吗?
  • 否,因为在表中也可以有非自动生成的主键
  • JPA 是否会使用 @Id 使用 save() 方法执行更新操作?
【解决方案2】:

object id (OID) 是唯一标识object 的东西。在VM 中,这通常是object's 指针。在关系databasetable 中,行在其表中由其primary key 唯一标识。

objects 持久化到数据库时,您需要objects 的唯一标识符,这允许您查询object,将relationships 定义为object,并更新和删除object .在JPA 中,对象id 是通过@Id 注释定义的,应该对应于object's 表的primary key

object id 可以是自然 id 或生成的 id。自然 id 是出现在 object 中并且在应用程序中具有某些意义的 ID。自然 id 的示例包括电子邮件地址、电话号码和社会保险号码。生成的 id(也称为代理 id)是由系统生成的。

JPA 中,@Id 可以通过@GeneratedValue 注释轻松分配生成的序列号。

【讨论】:

    【解决方案3】:

    如果您总是手动为实体提供主键值,那么@Id 注释就足够了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-07
      • 2011-09-29
      • 2021-03-22
      • 2011-11-30
      • 2010-10-30
      • 1970-01-01
      • 2012-06-06
      • 2013-08-20
      相关资源
      最近更新 更多