我正在尝试将我们的一个服务迁移到SpringBoot2.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)这确实令人困惑,因为所有teh实体都依赖于同一代id机制:
@GeneratedValue(strategy = GenerationType.AUTO)这是一个存储库测试,存储库本身是非常直接的:
@Repository
public interface OrderDetailsRepository extends JpaRepository<OrderDetails, Long> {
OrderDetails findFirstByOrderIdOrderByIdDesc(String orderId);
}这里有什么可能出错?
PS:,是的,实体中同时存在orderId和Id字段。
发布于 2019-09-06 22:33:24
选择@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,并尝试使用自定义db序列重新创建id模式。您可以阅读有关GenerationType的这里的更多信息
发布于 2019-12-21 20:30:10
在用h2编写spring引导示例代码时,我遇到了同样的问题。请找出以下我的调查结果的细节。在您的实体类中,没有给出序列并检查您的表,即您是否为主键指定了AUTO_INCREMENT?
请如下所示。1.检查ddl一次,并将auto_increment设置为主键(见下面的id)
CREATE TABLE EMPLOYEES (
id INT AUTO_INCREMENT PRIMARY KEY,
first_name VARCHAR(250),
last_name VARCHAR(250),
email VARCHAR(250) DEFAULT NULL
);发布于 2020-08-01 06:54:28
我也有类似的问题。如果我对事情的理解是正确的,事情就会这样下去。
在Spring升级之前,我使用了AUTO,但实际上它默认选择了身份策略。我有如下定义的自动递增PKs:
id BIGINT AUTO_INCREMENT PRIMARY KEY一切都很好。
在春季升级时,我必须指定H2方言:
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect我已经读过,如果您使用Hibernate作为持久性提供程序,它将根据特定于数据库的方言选择生成策略。对于H2,它可能选择了全局序列(根据JPA规范,这就是AUTO的意思),但是它没有找到序列。当然,解决方案是创建序列(如上面所建议的)或手动覆盖到最初自动选择的标识。
CREATE SEQUENCE HIBERNATE_SEQUENCE START WITH 1 INCREMENT BY 1;
@GeneratedValue(strategy = GenerationType.IDENTITY)我认为,根本原因是,自动的含义是/不一致的/明确的定义/理解的时间。可能原来的“自动”切换到身份基本上是一个错误。
https://stackoverflow.com/questions/51674681
复制相似问题