2017-03-06 44 views
3

我有一个使用Spring Data JPA的项目,它使用满地址的表中的数据。这张桌子的其中一列是城市。我希望得到一个明确的城市列表,即​​。弹簧数据JPA - 获取列中的所有唯一值

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

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

然后,addressRepository.findDistinctCity()的调用将返回不同的城市名称:

回答

2

这可以使用@Query标注为来实现。

示例应用程序可在Github上查看。运行集成测试mvn clean test验证方法。

+0

我尝试了一个类似但更优雅变化和下面的错误在调用方法时返回:'java.lang.IllegalArgumentException:PersistentEntity不能为null!'。请有任何想法吗? –

+0

您是否检查过示例应用程序?如果问题仍然存在,请发布完整的代码以重现错误。 – manish

+0

我做了一些进一步的测试,似乎问题存在于Spring Data Rest部分,当直接从代码调用时它工作正常。谢谢! –

0

曼尼什的评论应该可能会碰到一个答案(我会尝试在这里捕捉,因为它最终解决了我的问题......尽管预测似乎不适用于select distinct)。所选答案在spring-data-jpa中工作,但在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