【发布时间】:2017-11-28 16:52:55
【问题描述】:
我有一个名为 Booking 的实体,它有一个生成的 id 字段,我将其用作主键。它工作正常。我想添加另一个字段 uuid,我将在 REST API 中将其用作资源标识符。 我有一个 Postgres 数据库,并将该字段设置为自动生成:
uuid character varying(36) not null default uuid_generate_v1mc()
在创建时,数据库生成 id 和 uuid 就好了,但在 Java 代码中,uuid 字段为空。我的实体如下所示:
@Entity
public class Booking {
@Id
@SequenceGenerator(name="booking_id_seq", sequenceName="booking_id_seq", allocationSize=1)
@GeneratedValue(strategy= GenerationType.IDENTITY, generator = "booking_id_seq")
private Long id;
@Column(nullable = false)
private String uuid;
(...)
}
我做错了什么?
跟进: 谢谢大家的cmets和答案。看起来我有两个选择,要么从数据库重新加载实体以让数据库生成 uuid,要么自己在代码中生成它。哪个是首选?我猜后者的性能更高,但还有什么需要考虑的吗?
【问题讨论】:
-
只有
@Id字段会自动与数据库同步,其他生成的字段不会。您将不得不从数据库中重新加载实体。 -
只生成id。 uuid 不是 id,因此不会自动生成,您必须设置一个值,因为该字段不可为空。
标签: java spring postgresql hibernate jpa