具有 table 到 json 关系的 JPQL @query

JPQL @query with relation table to json

我正在使用 @Query 创建一个 JPQL 查询以将关系数据列表获取到 JSON

package thymeleaf.test.repository;

import java.util.List;

import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.rest.core.annotation.RepositoryRestResource;

import thymeleaf.test.model.Student;

@RepositoryRestResource
public interface StudentRepo extends CrudRepository<Student, Integer> {

    @Query("select s,t.teachName FROM Student s JOIN s.teacher t WHERE s.teacher.teachName= t.teachName")
    List<Student> findAll() ;
}

我得到以下结果:

[
 [
   {
     "stuId": 1,
     "stuName": "Pawarut klai-armon                      ",
     "stuAge": 21
   },
   "sgkyrtgefewd                            "
 ]
]

我希望此查询 return 改为:

[
 {
   "stuId": 1,
   "stuName": "Pawarut klai-armon                      ",
   "stuAge": 21
   "teachName": "sgkyrtgefewd                            "
 }
]

您需要明确命名要获取的字段,如下所示:

select s.stuId, s.stuName, s.stuAge, t.teachName FROM Student s JOIN s.teacher t WHERE s.teacher.teachName= t.teachName

如果您需要命名您的字段,那么您需要像这样定义 DTO 对象:

class StuInfoWithTeacherName {
  private long id;
  private String stuName;
  private int stuAge;
  private String teacherName;
  public StuInfoWithTeacherName(id, stuName, stuAge, teacherName){
    //omitted
  }
}

比调用查询

select new StuInfoWithTeacherName(s.stuId, s.stuName, s.stuAge, t.teachName) FROM Student s JOIN s.teacher t WHERE s.teacher.teachName= t.teachName