给 OP 提供一个解决方案,比如有个文章表,和一个 User 表,我要查询所有文章列表,文章列表又要返回这篇文章的作者信息,我这里写了一个投影和一个 DTO ,用 nativeQuery 方式查询。
@
Data@
AllArgsConstructor@
NoArgsConstructorpublic class UserInfoDto {
    private Long id;
    private String name;
    private String avatar;
}
public interface PostInfo {
    long getCreateTime();
    long getModifiedTime();
    Long getId();
    String getTitle();
    String getSummary();
    String getContent();
    @
Value("#{new com.momo.xxx.dto.UserInfoDto(target.user_id, target.user_name, target.user_avatar)}")
    UserInfoDto getAuthor();
}
user_info 表示用户表,Post 表示文章列表。
@
Query(value = "SELECT 
p.id,
user_info.id AS user_id, 
user_info.name AS user_name, user_info.avatar AS user_avatar,p.title,p.summary,p.CONTENT,p.state,p.create_time AS createTime,p.modified_time AS modifiedTime FROM Post p JOIN user_info ON 
user_info.id=p.author_id WHERE p.is_delete = FALSE AND p.STATE = 5 ORDER BY 
p.ID DESC",
            nativeQuery = true)
    Page<PostInfo> findAllPublishedPostsNative(Pageable pageable);
如果直接用 Spring Data Jpa 查询 10 条数据大概要 4192ms ,可能更慢,用 Native 方式可能只要 130ms ,这个数据只是我的一个测试数据;