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

时间:2016-04-27 15:07:59

标签: hibernate jpa spring-boot h2

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

如果我在H2公共模式中创建表/序列,那么一切正常,我可以从我的应用程序读取/插入数据库。

但是,如果我在已创建的模式中创建表/序列,则无法插入,因为无法找到序列。我可以在H2数据库中看到它,它似乎是在正确的架构中,我可以手动选择它但是当我尝试在我的代码中插入时,我得到:

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...

Hibernate 4.3.11

H2 1.4

Spring boot 1.3.3.RELEASE

更新

我设法通过在序列名称前加上@SequenceGenerator注释中的模式来实现这一点。我不相信这是必要的,因为我在该注释的参数中给出了模式!

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

所以,我还没有解决这个问题,因为我想了解问题是什么。

更新2

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

1 个答案:

答案 0 :(得分:0)

我的更新后,我发现这与hibernate错误有关,HHH-7232:

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

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