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();
我有一个使用 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();