spring-boot - Hibernate 自定义序列生成器 - 表不存在
问题描述
我正在使用自定义类来生成 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仍然尝试从数据库中获取序列:
select next_val as id_val from pipeline_seq_generator for update
错误:java.sql.SQLSyntaxErrorException:表 'table.pipeline_seq_generator' 不存在
编辑:当我在我的方法中将 super.generate(session,object) 作为参数传递时,@Override generate 方法导致休眠从数据库调用序列:
@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();
}
在这个模型中,我只使用我的实现而不使用序列数据库。
推荐阅读
- vba - 随机化似乎错过了许多可能的种子
- python-3.x - 如何在 python 3.7 中生成 csv 文件
- python - pip install cryptography 失败并出现错误:命令“cc”在 MacOS 上失败,退出状态为 1
- node.js - ComponentDidMount 无限循环
- r - Spark 中大型表上的 sparklyr sdf_collect 和 dplyr collect 函数需要很长时间才能运行?
- ios - 未调用 didUpdateLocations 方法
- oauth - redirectURL 映射到控制器中的 RequestMapping("/") 但我希望它映射到 RequestMapping("/abcd") 因为我有反应 SPA 来处理它
- kubernetes - 设置配置 Kubernetes 调度程序间隔?
- c - c中的动态内存分配会引发特定大小的错误
- string - 使用 utl_match.jaro_winkler 时如何提高比较质量?