【发布时间】:2017-07-25 22:32:46
【问题描述】:
我有一个使用 Spring Data JPA 的项目,该项目使用满是地址的表中的数据。此表的列之一是城市。我想获得表格中的不同城市列表,即SELECT DISTINCT city FROM address。
有没有办法使用 Spring Data JPA 做到这一点?
【问题讨论】:
标签: spring-data-jpa spring-data-rest
我有一个使用 Spring Data JPA 的项目,该项目使用满是地址的表中的数据。此表的列之一是城市。我想获得表格中的不同城市列表,即SELECT DISTINCT city FROM address。
有没有办法使用 Spring Data JPA 做到这一点?
【问题讨论】:
标签: spring-data-jpa spring-data-rest
这可以使用@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 身份运行集成测试以验证该方法。
【讨论】:
java.lang.IllegalArgumentException: PersistentEntity must not be null!。请问有什么想法吗?
city_name,那么查询将包含映射名称,即 CityName 列名也是如此
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 的类似但更优雅的变体
【讨论】: