我使用Spring JPA执行所有数据库操作。但是,我不知道如何从Spring JPA的表中选择特定的列?

例如: SELECT projectName FROM projects


当前回答

在我的情况下,我只需要json结果,这对我来说是有效的:

public interface SchoolRepository extends JpaRepository<School,Integer> {
    @Query("select s.id, s.name from School s")
    List<Object> getSchoolIdAndName();
}

控制器:

@Autowired
private SchoolRepository schoolRepository;

@ResponseBody
@RequestMapping("getschoolidandname.do")
public List<Object> getSchool() {
    List<Object> schools = schoolRepository.getSchoolIdAndName();
    return schools;
}

其他回答

您可以使用来自Spring Data JPA(文档)的投影。在你的例子中,创建接口:

interface ProjectIdAndName{
    String getId();
    String getName();
}

并将以下方法添加到存储库中

List<ProjectIdAndName> findAll();

在更新的Spring版本中,你可以这样做:

如果不使用本机查询,可以这样做:

public interface ProjectMini {
    String getProjectId();
    String getProjectName();
}

public interface ProjectRepository extends JpaRepository<Project, String> { 
    @Query("SELECT p FROM Project p")
    List<ProjectMini> findAllProjectsMini();
}

使用本机查询也可以这样做:

public interface ProjectRepository extends JpaRepository<Project, String> { 
    @Query(value = "SELECT projectId, projectName FROM project", nativeQuery = true)
    List<ProjectMini> findAllProjectsMini();
}

详情请查看文档

你可以使用@jombie给出的答案,并且:

将接口放在实体类之外的单独文件中; 是否使用本机查询(选择取决于您的需要); 不要为此重写findAll()方法,而是使用自己选择的名称; 记得用你的新接口返回一个参数化的List(例如List<SmallProject>)。

在我的情况下,我只需要json结果,这对我来说是有效的:

public interface SchoolRepository extends JpaRepository<School,Integer> {
    @Query("select s.id, s.name from School s")
    List<Object> getSchoolIdAndName();
}

控制器:

@Autowired
private SchoolRepository schoolRepository;

@ResponseBody
@RequestMapping("getschoolidandname.do")
public List<Object> getSchool() {
    List<Object> schools = schoolRepository.getSchoolIdAndName();
    return schools;
}

Use:

@Query("SELECT e FROM #{#entityName} e where e.userId=:uid")
List<ClienteEnderecoEntity> findInfoByUid(@Param("uid") UUID uid);