我正在使用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;
.....
}
数据库表的列如下(混合大小写):-
当我使用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中是否有任何设置可以使表名和列名不敏感?有什么解决这个问题的建议吗?
答案 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
祝你好运