Spring Data JPA - 获取列中的所有唯一值

Spring Data JPA - Get All Unique Values in Column

我有一个使用 Spring 数据 JPA 的项目,它使用来自 table 满地址的数据。 table 的其中一列是城市。我想获得 table 中的不同城市列表,即 SELECT DISTINCT city FROM address

有没有办法使用 Spring Data JPA 来做到这一点?

这可以使用 @Query 注释来实现:

public interface AddressRepository extends CrudRepository<Address, Long> {
    @Query("SELECT DISTINCT a.city FROM Address a")
    List<String> findDistinctCity();
}

然后,调用 addressRepository.findDistinctCity() 将 return 不同的城市名称。

Github 上提供了示例应用程序以供审核。 运行 集成测试作为 mvn clean test 验证方法。

Manish 的评论可能应该得到一个答案(我将尝试在此处捕获它,因为它最终解决了我的问题......尽管预测似乎不适用于 select distinct)。所选答案在 spring-data-jpa 中有效,但在 spring-data-rest 中失败。 spring-data-rest 场景的一种可能解决方法是为 select distinct 结果

创建一个单独的 @RestController
@RestController
public class AddressRepoAdditionals {
     @Autowired
     private AddressRepository repo;

     @RequestMapping("/additional/address/distictCities")
     public List<String> findDistinctCity() {
          return repo.findDistinctCity();
     }
 }

也许有一个基于@RepositoryRestController

的类似但更优雅的变体

您可以使用本机查询。

@Query(value = "SELECT DISTINCT column_name FROM table_name", nativeQuery = true) List<Type> findDistinctColumnValues();