我有一个使用Spring Data JPA的项目,它使用来自满地址表的数据。这张桌子的一个栏目是城市。我想获得表格中的一个独特的城市列表,即SELECT DISTINCT city FROM address
。
有没有办法使用Spring Data JPA?
答案 0 :(得分:6)
这可以使用@Query
注释:
public interface AddressRepository extends CrudRepository<Address, Long> {
@Query("SELECT DISTINCT a.city FROM Address a")
List<String> findDistinctCity();
}
然后,对addressRepository.findDistinctCity()
的调用将返回不同的城市名称。
Github上提供了一个示例应用程序供审核。以mvn clean test
运行集成测试以验证方法。
答案 1 :(得分:0)
Manish的评论应该可以提到一个答案(我会尝试在这里捕捉,因为它最终解决了我的问题......虽然预测似乎不适用于{{ 1}})。所选答案适用于spring-data-jpa,但在spring-data-rest中失败。 spring-data-rest场景的一种可能的解决方法是为select distinct
结果创建单独的@RestController
select distinct
也许基于@RepositoryRestController
有一个类似但更优雅的变体答案 2 :(得分:0)
Spring Data Rest也有类似的问题。
File folder = new File("E:\\folder_to_LIST_OF_FILES");
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
FilesDto returnDto = new FilesDto();
returnDto.setFileName(FilenameUtils.removeExtension(listOfFiles[i].getName()));
// Check File Status if file is Locked or unlocked
if (lock==null) {
returnDto.setStatus("unlocked");
returnDto.setFilePath(listOfFiles[i].getAbsolutePath());
} else {
returnDto.setStatus("Locked");
}
returnDtoList.add(returnDto);
}
}
这两种方法都适用于spring-data,我可以在Spring Services中使用它, 但是通过REST端点,只有第一种方法有效:
public interface ProjectReportRepository extends JpaRepository<ProjectReport, Long>{
ProjectReport findByProjectAndPeriod(Project project, ReportingPeriod period);
/**
*
* @param project
* @return
*/
@Query("SELECT "
+ " new api.model.reports.ProjectTimeAggregation("
+ " count(*) "
+ ") "
+ "FROM ProjectReport r "
+ "WHERE r.project = :project "
+ "")
ProjectTimeAggregation aggregateTimeInfo(Project project);
@Query("SELECT "
+ " new api.model.reports.ProjectTimeAggregation("
+ " count(*) "
+ ") "
+ "FROM ProjectReport r "
+ "WHERE r.project = :project "
+ " group by r.timeRag")
List<ProjectTimeAggregation> aggregateTimeInfoGroup(Project project);
第二种方法返回映射错误:
http://localhost:8080/api/projectreports/search/aggregateTimeInfo?project=/api/projects/6
它与POJO对象一起使用,但如果该对象在集合中则不起作用。 这是spring-data-rest中的一个错误,它适用于对象但不适用于集合。
Spring-Boot 2.0.4。发布 弹簧数据:2.1.0.RC1 Spring-Data-Rest:3.1.0.RC1