2016-04-27 6 views
1

Ich benutze Spring Boot, Hibernate/JPA und H2, um einige Entitäten zu entwickeln.H2: Sequenz nicht gefunden Ausnahme, aber existiert in meinem Schema

Wenn ich die Tabelle/Sequenz im öffentlichen H2-Schema erstellen, dann ist alles in Ordnung und ich kann aus meiner Anwendung in die Datenbank lesen/einfügen.

Wenn ich jedoch die Tabelle/Sequenz in einem Schema erstellen, das ich erstellt habe, kann ich nicht einfügen, da die Sequenz nicht gefunden werden kann. Ich kann es in der H2-Datenbank sehen und es erscheint im rechten Schema zu sein, kann ich manuell daraus wählen, aber wenn ein Insert in meinem Code zu tun versuchen, erhalte ich:

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

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

Einige DML:

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

Einige 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

Frühling Boot 1.3.3.RELEASE

UPDATE

Ich habe es geschafft, diese Funktion zu erhalten, indem die Sequenznamen mit dem Schema prefixing in der Annotation @ SequenceGenerator. Ich glaube nicht, dass dies notwendig sein sollte, da ich das Schema in den Parametern für diese Anmerkung angegeben habe!

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

Also, ich bin noch nicht mit diesem Problem fertig, da ich gerne verstehen würde, was das Problem ist.

UPDATE 2

unter meiner Antwort sieht, wird dies zu einem Hibernate Fehlern in unserer Version verwendet.

Antwort