2017-03-06 42 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