Hibernate + Postgres表和列名称敏感问题

时间:2019-01-27 05:54:53

标签: java postgresql hibernate

我正在使用Spring Boot 2.1 + Hibernate 5.x + Postgres 11.x 我的数据库连接字符串:-

url:jdbc:postgresql:// localhost:5432 / mydatabase?currentSchema = dbo

Postgres数据库具有混合大小写表名和列名。 我有如下的休眠类(小写的所有表和列名):-

@Entity
@Table(name = "products")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Products implements Serializable {
...
@Size(max = 80)
@Column(name = "barcode", length = 80)
private String barcode;

@NotNull
@Size(max = 80)
@Column(name = "name", length = 80, nullable = false)
private String name;

@Column(name = "hidden")
private Boolean hidden = false;
.....
}

数据库表的列如下(混合大小写):-

enter image description here

当我使用JPA存储库方法选择所有数据时,hibernate会生成以下查询。

select products0_.id as id1_140_, products0_.barcode as barcode2_140_, 
products0_.creation_time as creation3_140_, products0_.hidden as hidden4_140_, 
from dbo.products products0_ limit 10

会导致如下错误:-

Caused by: org.postgresql.util.PSQLException: ERROR: relation "products" does not exist
  Position: 449
        at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)

即使我使用如下表名:-

@Table(name = "Products") //与数据库中的名称相同

我遇到了同样的错误,因为postgres需要用引号引起来的混合大小写名称,并且在每个类中添加此更改都是很痛苦的。

如果我使用如下名称,它将起作用:-

@Table(name = "\"Products\"") 

但这是一个非常痛苦的解决方案,它将使我的代码仅依赖于postgres数据库。

在休眠或Postgres中是否有任何设置可以使表名和列名不敏感?有什么解决这个问题的建议吗?

1 个答案:

答案 0 :(得分:0)

尝试如下更改application.properties:

<div>
  <img src="https://static1.squarespace.com/static/51d45e1ce4b0ed5a1e73808b/t/5c6faba9971a18628dc5bc4a/1550822313198/1a_online-dating%402x.jpg"/>
</div>

顺便说一句,在spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQL95Dialect spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl spring.jpa.hibernate.naming.physical-strategy= org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl spring.jpa.properties.hibernate.globally_quoted_identifiers=true 中也添加架构。即@Table 此外,不需要@Column(名称=“ xx”)。

这对我适用于Postgresql 10,Hibernate 5.x和Spring Boot 2.1.x

祝你好运