我有一个名为Booking的实体,它具有一个生成的id字段,我将其用作主键。目前这个方案运行良好。我希望添加另一个字段uuid,这将作为REST API中资源标识符。我使用Postgres数据库并设置该字段自动生成:
uuid character varying(36) not null default uuid_generate_v1mc()
创建时,DB可以很好地生成id和uuid,但在Java代码中,uuid字段为null。我的实体如下:
@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;
(...)
}
我做错了什么?
跟进:感谢所有人的评论和答案。看起来我有两个选择,要么从数据库重新加载实体以生成由数据库生成的UUID,要么在代码中自己生成UUID。哪一个更好?我猜后者的性能更高,但还有其他需要考虑的因素吗?
@Id
字段会自动与数据库同步,其他生成的字段不会。您需要从数据库重新加载实体。 - M. Deinum