我正在使用Spring Boot 2.1 + Hibernate 5.x + Postgres 11.x。 我的数据库连接字符串为:
url: jdbc:postgresql://localhost:5432/mydatabase?currentSchema=dbo
Postgres数据库具有大小写混合的表名和列名。 我有以下Hibernate类(其中所有表名和列名均为小写):
@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\"")
但这是一个非常痛苦的解决方案,它将使我的代码仅依赖于PostgreSQL数据库。
在Hibernate或PostgreSQL中是否有任何设置可以使表名和列名不区分大小写?有没有任何建议来解决这个问题?