使用JPA查询数据时出现PostgreSQL PSQLException异常求助
解决JPA查询抛出PSQLException: No results were returned by the query的问题
核心原因分析
你遇到的异常虽标注“未授权错误”,但实际根源是实体类字段映射错误,导致Hibernate无法正确解析数据库返回的结果集,进而触发该异常。save方法正常说明数据库连接权限、基础字段映射(如主键、普通字符串)无问题,问题集中在特殊类型的字段配置上。
具体修复步骤
1. 移除LocalDateTime字段上的@Temporal注解
@Temporal仅适用于java.util.Date和java.util.Calendar类型,而LocalDateTime是Java 8+的时间API,不需要该注解。添加后会导致Hibernate无法正确映射字段,查询时无法解析结果。
修改UserEntity类:
// 移除这两个字段的@Temporal注解 private LocalDateTime createdAt; private LocalDateTime updatedAt;
2. 为java.util.Date字段添加正确的@Temporal注解
你的birthDate字段是java.util.Date类型,需指定对应数据库时间类型,避免映射歧义:
@Temporal(TemporalType.DATE) // 可根据数据库实际类型调整为TIMESTAMP等 private Date birthDate;
3. 移除冗余注解(可选)
@Data注解已包含@Setter和@Getter功能,无需重复添加,简化Entity类:
@Entity(name = "user_model") @Data // 已整合@Setter、@Getter、@ToString等功能 public class UserEntity{ // ... 其余字段保持不变 }
验证修复
修改后重启应用,测试getUserEntityByUserEmailId()和findAll()方法,此时Hibernate可正确映射结果集,异常应会消失。
若问题仍存在,可进一步排查:
- 确认数据库中
user_role字段类型为VARCHAR(因你使用了EnumType.STRING) - 直接在数据库客户端执行Hibernate生成的SQL,验证是否能返回数据
- 检查查询参数是否与数据库中存储的内容完全匹配(如邮箱大小写问题)
内容的提问来源于stack exchange,提问作者Thirumalesu
相关产品推荐
相关产品推荐

