我正在使用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错误有关。
答案 0 :(得分:0)
我的更新后,我发现这与hibernate错误有关,HHH-7232:
https://hibernate.atlassian.net/browse/HHH-7232
这似乎只影响Hibernate 4.3的某些版本,我们从Spring Boot中获取4.3.11。