我怀疑这是h2 postgres仿真模式中的一个错误,但我遇到了以下问题:我有一个名为&#34的表;用户"在我的数据库中。我正在使用Hibernate访问数据库。因为"用户"是Postgres中的保留关键字,注释看起来像这样,带有刻度标记以逃避名称:
@Entity @Table(name = "`user`")
public class User {
...
}
我正在使用Liquibase创建我的表,它看起来像这样:
<changeSet id="3" author="Peter">
<createTable tableName="user">
<column name="id" type="char(8)">
<constraints primaryKey="true" nullable="false" unique="true"/>
</column>
<column name="active" type="boolean">
<constraints nullable="false"/>
</column>
</createTable>
</changeSet>
当我使用Hibernate对真正的Postgres进行查询时,这很好用。但是,当我使用H2时,我收到以下错误:
Hibernate: insert into "user" (active, id) values (?, ?)
WARN [2017-10-03 13:54:52,105] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: SQL Error: 42102, SQLState: 42S02
ERROR [2017-10-03 13:54:52,108] org.hibernate.engine.jdbc.spi.SqlExceptionHelper: Table "user" not found; SQL statement:
insert into "user" (active, id) values (?, ?) [42102-196]
ERROR [2017-10-03 13:54:52,111] org.hibernate.internal.ExceptionMapperStandardImpl: HHH000346: Error during managed flush [org.hibernate.exception.SQLGrammarException: could not prepare statement]
我对H2的JDBC连接字符串如下:
jdbc:h2:mem:testdb;MODE=PostgreSQL;DB_CLOSE_DELAY=-1
当我删除转出的刻度线&#34; user&#34;时,它再次起作用,但它在真正的Postgres中不起作用。
有什么方法可以解决这个问题吗?
感谢。