Spring Boot中Repository查询提示Cannot resolve symbol 'id'问题咨询
问题解决:JPA查询中
p.userDto.id提示无法解析符号'id' 问题根源
你的UserDto类未标注JPA的@Embeddable注解,但在Post实体中被用作@Embedded字段。IDE的JPA静态代码分析无法识别该嵌入式对象的属性,因此出现"Cannot resolve symbol 'id'"的提示;而Hibernate运行时通过反射能处理该字段,所以项目可正常运行,但这种写法不符合JPA规范,存在潜在风险。
解决方案
1. 给UserDto添加@Embeddable注解
修改UserDto类,导入并添加@Embeddable注解,让JPA正确识别这是一个可嵌入的类:
package com.instacloneapi.instacloneapi.dto; import jakarta.persistence.Embeddable; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; import java.util.Objects; @Data @AllArgsConstructor @NoArgsConstructor @Embeddable // 添加该注解 public class UserDto { private Integer id; private String username; private String email; private String name; private String userImage; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; UserDto userDto = (UserDto) o; return Objects.equals(id, userDto.id) && Objects.equals(username, userDto.username) && Objects.equals(email, userDto.email) && Objects.equals(name, userDto.name) && Objects.equals(userImage, userDto.userImage); } @Override public int hashCode() { return Objects.hash(id, username, email, name, userImage); } }
2. 保留原查询语句
添加注解后,IDE的静态检查会自动识别p.userDto.id,无需修改PostRepository中的查询代码:
@Query("SELECT p FROM Post p WHERE p.userDto.id=?1") List<Post> findByUserId(Integer userId);
关于前端图片显示的说明
当前IDE的提示错误不影响运行时API返回数据,只要接口能正常返回包含userDto.userImage字段的Post数据,前端即可获取图片地址并显示。修复注解问题不仅能消除IDE警告,还能避免后续JPA映射可能出现的异常。
内容的提问来源于stack exchange,提问作者gzhe1056
相关产品推荐
相关产品推荐

