2016-08-03 6 views
2

私はEntity BのCarPropertyに対するOneToMany関係でEntity A say Carを取得しました。QueryDSLページング重複の並べ替え

マイカーリポジトリは、ページングをサポートするためにQueryDslPredicateExecutorを拡張し、ソート:

Page<T> findAll(Predicate predicate, Pageable pageable); 

私はページング可能変数でソートを定義し、CarPropertyのコラムで、私は結果を並べ替えるクエリを実行しようとしています。 しかし、それはCarとCarPropertyの間のOne To Many関係であるため、私はCarの複製を返しました。 この構造を使用してCarで明確な結果を得ることは可能ですか?

それは述語に明確な使用することができない場合、どのように私は述語で次のクエリを表すことができ(使用して重複を排除するために存在している):事前に

SELECT Car.* 
FROM Car C LEFT JOIN CarProperty CP ON (C.ID = CP.CAR_ID) 
WHERE EXISTS (SELECT 1 
       FROM CarProperty CP2 
       WHERE CP2.CAR_ID = C.ID AND CP2.ID = CP.ID) 
ORDER BY CP.PROPERTY_NAME ASC; 

おかげ

答えて

1

あなたはすることができます私の場合は重複したレコードを避けるために名前付きエンティティグラフを使用します。

@NamedEntityGraph(name = "Car.carProperty" ,attributeNodes = @NamedAttributeNode("carProperties")) 
    @Entity 
    public class Car { 
     @OneToMany 
     @JoinColumn(name = "carProperties") 
     private List<CarProperty> carProperties; 
    } 

、次いで

@EntityGraph(value = "Car.carProperty" , type = EntityGraphType.LOAD) 
Page<Car> findAll(Predicate predicate, Pageable pageable); 
方法のfindAllオーバーライド
関連する問題