Var*_*ain 5 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;
.....
}
Run Code Online (Sandbox Code Playgroud)
数据库表具有如下所示的列(混合大小写):-
当我使用 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
Run Code Online (Sandbox Code Playgroud)
这会导致如下错误:-
Caused by: org.postgresql.util.PSQLException: ERROR: relation "products" does not exist
Position: 449
at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440)
Run Code Online (Sandbox Code Playgroud)
即使我使用如下所示的表名称:-
@Table(name = "Products")// 与我在数据库中的名称相同
我遇到了同样的错误,因为 postgres 需要引用混合大小写名称,并且在每个类中添加此更改是一个很大的痛苦。
如果我使用如下所示的名称,它将起作用:-
@Table(name = "\"Products\"")
Run Code Online (Sandbox Code Playgroud)
但这是非常痛苦的解决方案,它将使我的代码仅依赖于 postgres 数据库。
hibernate或postgres中是否有任何设置可以使表名和列名不敏感?有什么建议来解决这个问题吗?
尝试更改 application.properties 如下:
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
Run Code Online (Sandbox Code Playgroud)
顺便说一句,@Table也添加架构。即,@Table(name="table", schema="schemaname")
另外,在@Column(名称=“xx”)中不需要。
这对我来说适用于 Postgresql 10、Hibernate 5.x 和 Spring Boot 2.1.x
祝你好运
| 归档时间: |
|
| 查看次数: |
6840 次 |
| 最近记录: |