2017-07-18 100 views
6

我有一個客戶實體,我只想從中選擇幾個字段及其關聯的CustomerAddresses。我定義了一個Spring數據JPA投影界面如下:JPA的預測可以包含集合嗎?

public interface CustomerWithAddresses { 
    Integer getId(); 
    String getFirstName(); 
    String getLastName(); 
    String getBrandCode(); 
    String getCustomerNumber(); 
    Set<CustomerAddress> getCustomerAddresses(); 
} 

但是從我的倉庫方法:

CustomerWithAddresses findCustomerWithAddressesById(@Param("id") Integer id); 

我不斷收到NonUniqueResultException與多個CustomerAddresses客戶。投影是否必須有一個扁平的結構,即它們不像真實體一樣支持集合?

回答

0

你有Set<CustomerAddress> getCustomerAddresses();這是X對多關係。當彈簧數據爲CustomerWithAddresses選擇時,它會加入結果集N記錄(N - CustomerWithAddresses的CustomerAddress的數量爲id = id)。您可以檢查您是否將CustomerWithAddresses更改爲CustomerWithAddresses列表。

List<CustomerWithAddresses> findCustomerWithAddressesById(@Param("id") Integer id); 

當您使用實體消費滿數據gropu乘法結果到一個元素,它gouped由ID爲ID是唯一的標識符。

你可以這樣做:

1)添加到CustomerWithAddresses接口

@Value("#{target.id}") 
Integer getId(); 

,並使用您的查詢

2)使用@Query

@Query("select adr from CustomerWithAddressesEntity adr where adr.id=:id") 
CustomerWithAddresses findCustomerWithAddressesById(@Param("id") Integer id);