我正在使用自定义类来生成ID:
public class StringPrefixedSequenceIdGenerator extends SequenceStyleGenerator
也在实体属性上使用此类:
@Id
@GenericGenerator(name = "pipeline_seq_generator", strategy = "com.model.StringPrefixedSequenceIdGenerator", parameters = {
@Parameter(name = StringPrefixedSequenceIdGenerator.INCREMENT_PARAM, value = "50") })
@GeneratedValue(generator = "pipeline_seq_generator", strategy = GenerationType.SEQUENCE)
@Column(name = "pipeline_id", unique = true, nullable = false, length = 100)
public String getPipelineId() {
return this.pipelineId;
}
问题是休眠状态仍然尝试从数据库中获取序列:从pipeline_seq_generator中选择next_val作为id_val以进行更新
错误:java.sql.SQLSyntaxErrorException:表'table.pipeline_seq_generator'不存在
从strategy = GenerationType.SEQUENCE
中删除@GeneratedValue
例如
@Entity
public class User {
@Id
@GeneratedValue(generator = "sequence-generator")
@GenericGenerator(
name = "sequence-generator",
strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
parameters = {
@Parameter(name = "sequence_name", value = "user_sequence"),
@Parameter(name = "initial_value", value = "4"),
@Parameter(name = "increment_size", value = "1")
}
)
private long userId;
// ...
}
来源:https://www.baeldung.com/hibernate-identifiers#3-sequence-generation