2017-07-18 14 views
6

私は、いくつかのフィールドとその関連CustomerAddressを選択したいCustomerエンティティを持っています。次のように私は春データJPA投影インターフェイスを定義しました:SpringのJPA予測にコレクションがありますか?

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

をしかし、私のリポジトリ方法から:

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

私は、複数のCustomerAddressesをお持ちのお客様のためにNonUniqueResultExceptionを得続けます。投影はフラットな構造でなければならない、つまり真のエンティティと同じ方法でコレクションをサポートしていないのですか?

答えて

0

あなたはSet<CustomerAddress> getCustomerAddresses();です。それはX対多の関係です。 SpringデータがCustomerWithAddressesに対して選択されると、結果セットのNレコード(N - id = idのCustomerWithAddressesのCustomerAddressの量)で結合されます。 CustomerWithAddressesをCustomerWithAddressesのListに変更したかどうかを確認できます。

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

あなたは一つの要素になる掛けるgropu実体SPINGデータを使用し、それが一意の識別子のIDとしてIDを指定してgouped。

あなたが行うことができます。

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); 
関連する問題