SQLGrammarException:无法提取 ResultSet:因为关系不存在

SQLGrammarException: could not extract ResultSet : as relation does not exist

提问人:stackMan10 提问时间:1/17/2020 更新时间:1/17/2020 访问量:804

问:

使用序列生成器时,我遇到带有 postgres DB 的 spring boot 异常。

下面是堆栈跟踪

2020-01-17 15:54:10 - SQL Error: 0, SQLState: 42P01
2020-01-17 15:54:10 - ERROR: relation "predefmapping_seq" does not exist
Position: 17
2020-01-17 15:54:13 - Error adding tags to the DB:
javax.persistence.PersistenceException: org.hibernate.exception.SQLGrammarException: could not 
extract ResultSet
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:149) ~ 
[hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:157) ~ 
[hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:164) ~ 
[hibernate-core-5.2.17.Final.jar!/:5.2.17.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:790) ~[hibernate-core- 
5.2.17.Final.jar!/:5.2.17.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:768) ~[hibernate-core- 
   5.2.17.Final.jar!/:5.2.17.Final]
at sun.reflect.GeneratedMethodAccessor118.invoke(Unknown Source) ~[na:na]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~ [na:1.8.0_232] 

下面是为其添加序列的 Entinty 类列。

@Id
@SequenceGenerator(name="PREDEFMAPPING_SEQ", sequenceName="PREDEFMAPPING_SEQ",initialValue = 1, allocationSize=1)
@GeneratedValue(strategy = GenerationType.AUTO ,generator="PREDEFMAPPING_SEQ")
@Column(name = "ID")
private long id;

请注意,这已经过 db2、oracle 和 mssql 的测试。但是,对于postgres,它给了我上述例外。

postgres db 表中的序列名称是“predefmap_seq”,而不是实体中的“PREDEFMAPPING_SEQ”。

大多数解决方案建议我将生成策略更改为 IDENTITY,但是我想要一个适用于所有(db2、oracle、mssql 和 postgres)的解决方案

Spring PostgreSQL 休眠 JPA 序列

评论

0赞 1/17/2020
如果你使用?但是 DB2、Oracle、SQL Server 和 Postgres 都支持列,那么为什么不使用 Hibernate 中的列呢?sequenceName="predefmapping_seq"identity
1赞 stackMan10 1/17/2020
更改数据库中的序列名?
1赞 1/17/2020
否,在批注中(小写)
0赞 JB Nizet 1/17/2020
我不确定问题是什么。如果您指定的序列名称不正确,显然这是行不通的。如果序列命名为 predefmap_seq,则在注释中使用该名称,或更改序列的名称,使其与注释中的名称匹配。
0赞 Simon Martinelli 1/17/2020
您用于访问数据库的用户是否具有授予PREDEFMAPPING_SEQ访问权限的权限?

答: 暂无答案