我正在尝试将我们的一项服务迁移到Spring Boot 2.0.3。
虽然大多数测试都很好,但其中一个失败并出现错误:
Caused by: org.h2.jdbc.JdbcSQLException: Sequence "HIBERNATE_SEQUENCE" not found; SQL statement:
call next value for hibernate_sequence [90036-197]
at org.h2.message.DbException.getJdbcSQLException(DbException.java:357)
at org.h2.message.DbException.get(DbException.java:179)
at org.h2.message.DbException.get(DbException.java:155)
at org.h2.command.Parser.readSequence(Parser.java:5970)
at org.h2.command.Parser.readTerm(Parser.java:3131)
at org.h2.command.Parser.readFactor(Parser.java:2587)
这确实令人困惑,因为所有实体都依赖于相同的代 ID 机制:
@GeneratedValue(strategy = GenerationType.AUTO)
这是一个存储库测试,存储库本身非常简单:
@Repository
public interface OrderDetailsRepository extends JpaRepository<OrderDetails, Long> {
OrderDetails findFirstByOrderIdOrderByIdDesc(String orderId);
}
这里可能出现什么问题?
PS: 而且,是的,实体中同时存在
orderId
和 Id
字段。
最佳答案
选择@GeneratedValue(strategy = GenerationType.AUTO)
时,Hibernate将基于特定于数据库的方言选择一种生成策略。
您的情况的问题是 hibernate 找不到 HIBERNATE_SEQUENCE ,因此无法为序列创建新对象。尝试添加这样的序列,它应该可以解决问题,但可能会导致数据不一致......
CREATE TABLE CUSTOMER(
id int primary key,
);
CREATE SEQUENCE HIBERNATE_SEQUENCE START WITH 1 INCREMENT BY 1;
我建议使用
GenerationType.SEQUENCE
并尝试使用您的自定义数据库序列重新创建您的 id 模式。您可以阅读有关 GenerationType 的更多信息here
关于java - 使用 GenerationType.AUTO 未找到用于 h2 测试的序列 "HIBERNATE_SEQUENCE",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51674681/