如何获取 Spring JPA 中的特定列?

how to get specific column in Spring JPA?

我可以通过 findAll() 从 db

获取以下数据
[
   { id : 1,
     name : "John",
     age : "23",
     sex : "male"
   },
   { id : 2
...

]


我想要做的是从数据库中获取特定数据,如下所示。

[ 
   { id : 1,
     name : "John"
   },
   { id : : 1, 
     name : "Peter"
   }
...
]

所以我这样试过。

存储库

@Repository
public interface PersonDAO extends JpaRepository<Person, Integer> {

    @Query(value ="select p.id , p.name from person p", nativeQuery = true)
    Collection<Object> getPersonIdAndName();
}


控制器

@GetMapping ("/getPersonIdAndName")
    public Collection<Object> getPerson() {
        return personDAO.getPersonIdAndName();
    }


但结果是这样的(邮递员)

[
    [
        1,
        "John"
    ],
    [
        2,
        "Peter"
    ]
....
]


我想要一个类型 key : value,而不仅仅是值
因为我想将其提取到 React.js 状态。
我该如何解决? 非常感谢你的帮助

您需要使用投影。创建新接口

public interface PersonProjection {

    Integer getId();

    String getName();

}

之后在你的存储库中使用return类型的投影

@Repository
public interface PersonDAO extends JpaRepository<Person, Integer> {

    @RestResource(exported = false)
    Query("select p.id, p.name from Person as p")
    Collection<PersonProjection> getPersonIdAndName();
}

或者,如果您想要@Override findAll() 方法,您可以创建自定义存储库。这里有一个 GitHub 回购示例 https://github.com/federicogatti/Spring-Custom-Repository-Example