Postgresql 与postgres 10.1和hibernate的关系不存在错误

Postgresql 与postgres 10.1和hibernate的关系不存在错误,postgresql,hibernate,Postgresql,Hibernate,我最近从oracle转到了postgres 10.1数据库。我通过sql查询手动创建了所有表,并确保在表/列名周围不使用任何双引号 CREATE TABLE MYSCHEMA.SOMETABLE (ID VARCHAR(20) NOT NULL primary key, DISPLAYTEXT VARCHAR(100)));// skipping other column names for brevity 代码中的实体类 @Entity @Table(name = "MYSCHEMA", s

我最近从oracle转到了postgres 10.1数据库。我通过sql查询手动创建了所有表,并确保在表/列名周围不使用任何双引号

CREATE TABLE MYSCHEMA.SOMETABLE (ID VARCHAR(20) NOT NULL primary key, DISPLAYTEXT VARCHAR(100)));// skipping other column names for brevity
代码中的实体类

@Entity
@Table(name = "MYSCHEMA", schema = "SOMETABLE")
public class SomeTable implements Serializable {

    private static final long serialVersionUID = -4856666041227614340L;
    @Column(name = "VERSION")
    private String version;

    @Column(name = "DISPLAYTEXT")
    private String displayText;

    //other columns
}
使用Jpa存储库,我正在查询这个表

@Configuration
@EnableTransactionManagement
@EnableJpaRepositories(
        entityManagerFactoryRef  = "someEntityManagerFactoryContentDB",
        transactionManagerRef = "sometransactionManagerContentDB",
        basePackages = {"com.somepath.repository.content"})
public interface SomeSearchConfigRepository extends JpaRepository<SomeTable, String> {
    List<SomeTable> findBySearchTypeAndActiveOrderBySequenceAsc(
            String searchType, String active);
}
根据日志生成的Sql

Hibernate:
    /* select
        generatedAlias0
    from
        SomeTable as generatedAlias0
    where
        (
            generatedAlias0.searchType=:param0
        )
        and (
            generatedAlias0.active=:param1
        )
    order by
        generatedAlias0.sequence asc */ select
            myalias_."ID" as ID1_3_,
            myalias_."ACTIVE" as ACTIVE2_3_,
            myalias_."COLUMNNAME" as COLUMNNA3_3_,
            myalias_."DATATYPE" as DATATYPE4_3_,
            myalias_."DISPLAYTEXT" as DISPLAYT5_3_,
            myalias_."LENGTH" as LENGTH6_3_,
            myalias_."LINKCOLUMN" as LINKCOLU7_3_,
            myalias_."LINKSEARCH" as LINKSEAR8_3_,
            myalias_."LOOKUPCOLUMN" as LOOKUPCO9_3_,
            myalias_."LOOKUP_CATEGORY" as LOOKUP_10_3_,
            myalias_."MULTISELECT" as MULTISE11_3_,
            myalias_."REFERENCEKEY" as REFEREN12_3_,
            myalias_."REFERENCETABLENAME" as REFEREN13_3_,
            myalias_."REFERENCEVALUE" as REFEREN14_3_,
            myalias_."SEARCHTYPE" as SEARCHT15_3_,
            myalias_."SEQUENCE" as SEQUENC16_3_,
            myalias_."TABLENAME" as TABLENA17_3_,
            myalias_."VERSION" as VERSION18_3_
        from
            "MYSCHEMA"."SOMETABLE" myalias_
        where
            myalias_."SEARCHTYPE"=?
            and myalias_."ACTIVE"=?
        order by
            myalias_."SEQUENCE" asc

是实体类中的注释导致了这个问题吗?这里出了什么问题?如何在代码中进行最小的更改来修复此问题?

我假设您使用的是Spring Boot

一种选择是告诉Hibernate不要引用名称

spring.jpa.properties.hibernate.globally_quoted_identifiers=false

或者,另一个选项是创建带有引号的表,并选择所有大写名称

您需要告诉混淆层停止引用名称。您是否尝试过@Tablename=myschema,schema=sometable?我在xml文件中使用的是true。这样做的原因是我几乎没有使用保留字作为列名的表。我需要在oracle和myql/postgres上运行相同的代码。因此,为了确保我不使用特定于db的转义字符,我使用了上述属性。好的,但是对于Postgresql,表是区分大小写的。我假设您的表和列现在是小写的,而映射的名称是大写的。
spring.jpa.properties.hibernate.globally_quoted_identifiers=false