我对spring-boot,jpa和postgresql数据库的正确配置有问题。
所有我的查询hibernate启动时都没有引号和小写。 Postgresql不接受这个,并返回错误。
我的application.yml文件:
spring:
datasource:
url: jdbc:postgresql://127.0.0.1:5432/xxx
username: xxx
password: xxx
driver-class-name: org.postgresql.Driver
dialect: org.hibernate.dialect.PostgreSQL94Dialect
jpa:
show-sql: true
naming-strategy: org.hibernate.cfg.EJB3NamingStrategy
hibernate:
ddl-auto: none
default-schema: madmax
dialect: org.hibernate.dialect.PostgreSQL94Dialect
database-platform: org.hibernate.dialect.PostgreSQL94Dialect
hadoop:
config:
fs.defaultFS: hdfs://192.168.56.104:54310/
enitity的例子:
@Entity
@Table(name="RecommendationItem")
public class RecommendationItem {
预览hibernate查询日志:
Hibernate: select recommenda0_.id as id1_2_ [...] from recommendation_item recommenda0_ where recommenda0_.user_id=?
错误:
SEVERE: Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.springframework.dao.InvalidDataAccessResourceUsageException: could not extract ResultSet; SQL [n/a]; nested exception is org.hibernate.exception.SQLGrammarException: could not extract ResultSet] with root cause
org.postgresql.util.PSQLException: ERROR: relation "recommendation_item" does not exist
可以在不重命名实体中的所有注释的情况下配置此架构吗?
答案 0 :(得分:1)
我可以想到两种可能性:
配置参数search_path
不包含包含recommendation_item
的架构,因此无法找到它。
解决方案:将架构添加到search_path
。
从Oracle迁移表时,您将表名保持为大写,因此称为RECOMMENDATION_ITEM
。
这里的问题是,虽然Oracle将不带引号的名称折叠为大写,但是SQL标准指向,而PostgreSQL将它们折叠为小写。
有两种解决方案:
"RECOMMENDATION_ITEM"
。