Spring JPA findAll 在更改 spring.datasource.url 后返回空,即使使用 SELECT * 的本机查询返回数据
Posted
技术标签:
【中文标题】Spring JPA findAll 在更改 spring.datasource.url 后返回空,即使使用 SELECT * 的本机查询返回数据【英文标题】:Spring JPA findAll returns empty after changing spring.datasource.url, even though native query with SELECT * returns data 【发布时间】:2022-01-05 21:09:39 【问题描述】:我已经配置了我的实体、存储库等,并针对我的本地数据库进行了测试。它按预期工作,
但是,在将我的数据源更改为 Amazon RDS 中的生产数据库(它是一个 mysql 数据库)之后,我的 JPA findAll 返回一个空数组,并且 findById 找不到 ID,即使它们确实在数据库中也是如此。
我使用执行 SELECT * 的本机查询进行了测试,它返回了预期的结果。
所以问题是:在使用这个新数据源时,什么可能导致 JPA 语法(如 findAll)出现问题?
package com.example.scoopbe.model;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "CATEGORY")
public class Category
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String name;
public String getId()
return id;
public Category setId(String id)
this.id = id;
return this;
public String getName()
return name;
public Category setName(String name)
this.name = name;
return this;
package com.example.scoopbe.repository;
import com.example.scoopbe.model.Category;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface CategoryRepository extends JpaRepository<Category, String>
server.port=5000
spring.jpa.hibernate.ddl-auto = update
spring.datasource.url=$DB_URL
spring.datasource.username=$DB_USER
spring.datasource.password=$DB_PASSWORD
spring.datasource.driver-class-name = com.mysql.jdbc.Driver
spring.jpa.show-sql = true
同样,只需更改 DB_URL、DB_USER 和 DB_PASSWORD 就会导致此问题。恢复这些值可以解决问题。
【问题讨论】:
将属性指向Amazon db时,启动Spring应用时是否有错误? @TylerLiu - 春季开始没有问题。我已连接到数据库,只要我使用本机查询就可以查询它。 findAll 和 findById 不返回结果 【参考方案1】:问题在于,即使表和实体被命名为“CATEGORY”,JPA 使用小写的表名,并且由于它不存在,它会创建一个名为“category”的新表名。
这个新表是空的,这就是我的查询返回空的原因。本机查询命中了正确的表“CATEGORY”
【讨论】:
您好,请记住以下几点提示: 关于答案:- 尝试使用文档来证明您的答案,特别是像您的案例一样,这可以在未来帮助其他人。 - 在终端中发布解决问题的代码和/或步骤。 - 在发布问题和答案之前花一些时间尝试和学习,如果您能够回答自己的问题,那么您可能不应该发布它(我自己已经做过很多次了)。最好的问候。以上是关于Spring JPA findAll 在更改 spring.datasource.url 后返回空,即使使用 SELECT * 的本机查询返回数据的主要内容,如果未能解决你的问题,请参考以下文章
Spring JPA Repository findAll 在 JUnit 测试中不返回任何数据
Spring Data:JPA 存储库 findAll() 返回 *Map 而不是 List?
Spring JPA/Hibernate Repository findAll 在 Kotlin 中默认执行 N+1 个请求而不是 JOIN