H2:序列未发现异常,但存在于我的架构中

H2: Sequence not found Exception, but exists in my schema

我正在使用 Spring Boot、Hibernate/JPA 和 H2 来开发一些实体。

如果我在 H2 public 模式中创建 table/sequence,那么一切正常,我可以从我的应用程序 read/insert 进入数据库。

但是,如果我在我创建的模式中创建 table/sequence,我将无法插入,因为找不到序列。我可以在 H2 数据库中看到它并且它似乎在正确的模式中,我可以从中手动 select 但是当尝试在我的代码中插入时我得到:

Caused by: org.h2.jdbc.JdbcSQLException: Sequence "VENUE_SQ" not found; SQL statement:
call next value for VENUE_SQ [90036-191]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:345) ~[h2-1.4.191.jar:1.4.191]
    at org.h2.message.DbException.get(DbException.java:179) ~[h2-1.4.191.jar:1.4.191]
    at org.h2.message.DbException.get(DbException.java:155) ~[h2-1.4.191.jar:1.4.191]
    at org.h2.command.Parser.readSequence(Parser.java:5399) ~[h2-1.4.191.jar:1.4.191]
    at org.h2.command.Parser.readTerm(Parser.java:2806) ~[h2-1.4.191.jar:1.4.191]
etc...

一些 DDL:

create schema MY_SCHEMA AUTHORIZATION MY_SCHEMA_OWNER;
set schema MY_SCHEMA;

create sequence VENUE_SQ;

CREATE TABLE VENUE (
   ID number not null,
   NAME varchar2(255) not null, etc...

一些 DML:

INSERT INTO VENUE (ID, NAME, etc...

一些 JPA

@Entity
@Table(name = "VENUE", schema = "MY_SCHEMA")
@SequenceGenerator(name = "ID",  sequenceName = "VENUE_SQ",
allocationSize = 1, schema = "MY_SCHEMA")
public class Venue {

    @Id
    @GeneratedValue(generator = "ID", strategy = GenerationType.SEQUENCE)
    @Column(name = "ID", nullable = false)
    private Long id;

    @Column(name = "NAME")
    private String name;

etc...

休眠 4.3.11

H2 1.4

Spring 引导 1.3.3.RELEASE

更新

我已经设法通过在@SequenceGenerator 注释中为序列名称添加模式前缀来实现这一点。我认为这不是必需的,因为我已经在该注释的参数中给出了架构!

@SequenceGenerator(name = "ID",  sequenceName = "MY_SCHEMA.VENUE_SQ",
allocationSize = 1, schema = "MY_SCHEMA")

因此,我还没有解决这个问题,因为我想了解问题所在。

更新 2

请参阅下面我的回答,这与我们版本中的一个 Hibernate 错误有关。

更新后我发现这与休眠错误 HHH-7232 有关:

https://hibernate.atlassian.net/browse/HHH-7232

这似乎只影响 Hibernate 4.3 的某些版本,我们从 Spring Boot 中选择 4.3.11。