postgres仿真模式下的h2数据库无法找到名为user的表

时间:2017-10-03 17:59:11

标签: java postgresql hibernate h2 liquibase

我怀疑这是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中不起作用。

有什么方法可以解决这个问题吗?

感谢。

0 个答案:

没有答案