休眠自定义序列生成器 - 表不存在



我正在使用一个自定义类来生成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;
}

问题是hibernate仍然试图从数据库中获取序列:
从pipeline_seq_generator中选择next_val作为id_val以更新

错误:java.sql.SQLSyntaxErrorException:表"Table.pipeline_seq_generator"不存在

编辑:当我在方法中传递super.generate(session,object(作为参数时,@Override generate方法导致hibernate从数据库调用序列

@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {
return String.format(format, LocalDate.now(), super.generate(session, object));
}

我将generate方法的实现更改为不使用super.generate(session,object(:

@Override
public Serializable generate(SharedSessionContractImplementor session,
Object object) throws HibernateException {
LocalTime localTime = LocalTime.now();
return prefix + String.format(format, LocalDate.now()) + localTime.getHour() + localTime.getMinute() + localTime.getSecond();
}

在这个模型中,我只使用我的实现,而不使用序列数据库。

Inpublic void configure(类型类型、属性属性、,ServiceRegistryserviceRegistry(抛出映射异常{

//忽略(String(Type输入参数并使用新的LongType((super.configure(new LongType((,属性,serviceRegistry(;

字符串类型不能由hibernate(liquibase(中的序列生成

之后,您可以使用:String-toString=super.generate(session,object(.toString((;在generate方法中添加前缀。

最新更新