【问题标题】:JPQL @query with relation table to jsonJPQL @query 与 json 的关系表
【发布时间】:2015-12-16 17:57:25
【问题描述】:

我正在使用@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                            "
 ]
]

我希望这个查询改为返回:

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

【问题讨论】:

    标签: java json spring jpa jpql


    【解决方案1】:

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

    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
    

    【讨论】:

    • 感谢您的回复,现在我得到了这个结果[ [ 1, "Pawarut klai-armon ", 21, "sgkyrtgefewd " ] ]我可以知道字段名称吗?
    猜你喜欢
    • 2020-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-18
    • 2017-07-07
    • 2020-07-20
    • 1970-01-01
    • 2014-07-30
    相关资源
    最近更新 更多