如果 table 是自动递增的,JPA @Id 是否提供价值?
Does JPA @Id provide value if the table is auto-incrementing?
这是我在 Hibernate 文档中到处搜索的内容,令人惊讶的是找不到答案。
几乎所有 Hibernate/JPA 的规范示例都演示了通过 @Id
注释配置主键,如下所示:
// Groovy pseudo-code!
@Entity
class Car {
@Id
@Column(name = "car_id")
Long id
@Column(name = "car_make")
String make
@Column(name = "car_model")
String model
}
但是, if 我已经有一个预先存在的数据库,if 我计划使用 Hibernate 仅 验证 该数据库而不是为我创建一个数据库(通过 hibernate.hbm2ddl.auto = validate
),并且 if 我的数据库 table配置了一个自增的主键字段,那么@Id
给我提供什么值(在应用层)?含义,给定:
hibernate.hbm2ddl.auto = validate
;和
- table/entity 有一个自动递增的 PK(例如 MySQL
AUTO_INCREMENTING
)
...那么我的实体 class 是否包含 @Id
对我的应用程序有什么影响?为什么我不能这样写:
// Groovy pseudo-code!
@Entity
class Car {
@Column(name = "car_id")
Long id
@Column(name = "car_make")
String make
@Column(name = "car_model")
String model
}
或者 @Id
是否仍以某种方式为我的应用程序提供价值(如果是,如何)?
Does JPA @Id provide value if the table is auto-incrementing?
简短的回答是否。注释 @Id just specifies the primary key of an entity. If you want its value to be auto-generated then you have to annotate the field with @GeneratedValue indicating the appropriate GenerationType strategy, i.e.: IDENTITY:
@Entity
class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "car_id")
Long id
/...
}
请注意,并非所有 RDBMS 都支持自动递增或序列类型,即:Oracle 没有自动递增类型,但您可以创建和使用 sequence相反。
这是我在 Hibernate 文档中到处搜索的内容,令人惊讶的是找不到答案。
几乎所有 Hibernate/JPA 的规范示例都演示了通过 @Id
注释配置主键,如下所示:
// Groovy pseudo-code!
@Entity
class Car {
@Id
@Column(name = "car_id")
Long id
@Column(name = "car_make")
String make
@Column(name = "car_model")
String model
}
但是, if 我已经有一个预先存在的数据库,if 我计划使用 Hibernate 仅 验证 该数据库而不是为我创建一个数据库(通过 hibernate.hbm2ddl.auto = validate
),并且 if 我的数据库 table配置了一个自增的主键字段,那么@Id
给我提供什么值(在应用层)?含义,给定:
hibernate.hbm2ddl.auto = validate
;和- table/entity 有一个自动递增的 PK(例如 MySQL
AUTO_INCREMENTING
)
...那么我的实体 class 是否包含 @Id
对我的应用程序有什么影响?为什么我不能这样写:
// Groovy pseudo-code!
@Entity
class Car {
@Column(name = "car_id")
Long id
@Column(name = "car_make")
String make
@Column(name = "car_model")
String model
}
或者 @Id
是否仍以某种方式为我的应用程序提供价值(如果是,如何)?
Does JPA @Id provide value if the table is auto-incrementing?
简短的回答是否。注释 @Id just specifies the primary key of an entity. If you want its value to be auto-generated then you have to annotate the field with @GeneratedValue indicating the appropriate GenerationType strategy, i.e.: IDENTITY:
@Entity
class Car {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "car_id")
Long id
/...
}
请注意,并非所有 RDBMS 都支持自动递增或序列类型,即:Oracle 没有自动递增类型,但您可以创建和使用 sequence相反。