如果已经设置,是否可以不生成新的主键值



在这种情况下,我会找到下一个序列值(使用nextval(,将其设置为数据库列,并希望将该值重新用作对象的主键。问题是,尽管我用正确的值触发保存,但Spring JPA生成了另一个主键,并且没有使用我给它的那个

例如,我有一个实体:

public class MyEntity implements Serializable {
@Id
@Column(name = "id")
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_MY_ENTITY")
@SequenceGenerator(sequenceName = "SEQ_MY_ENTITY", allocationSize = 1, name = "SEQ_MY_ENTITY")
private Long id;
@Column(name = "field1")
private String field1;

在一些业务流程中,我需要设置field1=id。我通过:

  1. 从对偶中获取下一个val
  2. 将值设置为字段1
  3. 将值设置为id

问题是为id=field1+1保存了什么。如何使这两个值同步,而不调用空字段1的save,然后在更新字段1后再调用另一个save?

您可以在两列上使用@Id:Id和field1,或者使用@Embeddable 使用复合密钥

最新更新