Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java postgres仿真模式下的h2数据库可以';找不到名为user的表_Java_Postgresql_Hibernate_H2_Liquibase - Fatal编程技术网

Java postgres仿真模式下的h2数据库可以';找不到名为user的表

Java postgres仿真模式下的h2数据库可以';找不到名为user的表,java,postgresql,hibernate,h2,liquibase,Java,Postgresql,Hibernate,H2,Liquibase,我怀疑这是h2 postgres仿真模式中的一个bug,但我遇到了以下问题:我的数据库中有一个名为“user”的表。我正在使用Hibernate访问数据库。由于“user”是Postgres中的保留关键字,因此注释如下所示,带有勾号以转义名称: @Entity @Table(name = "`user`") public class User { ... } 我正在使用Liquibase创建我的表,它如下所示: <changeSet id="3" author="Peter">

我怀疑这是h2 postgres仿真模式中的一个bug,但我遇到了以下问题:我的数据库中有一个名为“user”的表。我正在使用Hibernate访问数据库。由于“user”是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:插入“用户”(活动,id)值(?,)
警告[2017-10-03 13:54:52105]org.hibernate.engine.jdbc.spi.SqlExceptionHelper:SQL错误:42102,SQLState:42S02
错误[2017-10-03 13:54:52108]org.hibernate.engine.jdbc.spi.SqlExceptionHelper:未找到表“user”;SQL语句:
插入“用户”(活动,id)值(?,)[42102-196]
错误[2017-10-03 13:54:52111]org.hibernate.internal.exceptionapperstandardimpl:hh000346:托管刷新期间出错[org.hibernate.exception.sqlgrammareexception:无法准备语句]

我的H2 JDBC连接字符串如下所示:

jdbc:h2:mem:testdb;模式=PostgreSQL;数据库关闭延迟=-1

当我删除转义为“user”的记号时,它再次起作用,但在真正的Postgres中就不起作用了

我有办法解决这个问题吗


谢谢。

这些可怕的反勾号在SQL标识符中是无效的,我对Postgres(遵循SQL标准)可以这样做感到惊讶。要使用保留关键字作为标识符,您必须在SQL中使用双引号:例如,
“user”
。您是否尝试过:
name=“\”user\”
?反勾号是一种Hibernate/JPA功能,用于插入这些引号