2017-08-07 8 views
1

Selecting from Multiple Tables in Spring Dataにはすでに複数のテーブルのソリューションが用意されていました。 Spring JPA/DATAで同時にページングとソート機能を持つテーブルを持つカスタムクエリを書くことができるかどうかを知りたいです。Springで複数のテーブルを選択してページングとソートを行うJPA

SELECT s.service_id, s.name, us.rating_id 
FROM services s, 
    ratings r, 
    user_services us 
where 
    us.service_id = s.service_id and 
    us.rating_id = r.rating_id and 
    us.user_id= ? 
; 

ご協力いただきありがとうございます。

+0

あなたのモデルを表示... – Cepr0

+0

これは一般的な質問です。なぜモデルが必要ですか? – linc01n

+0

私たちがあなたをお手伝いします。クエリとクエリメソッドは、あなたのモデルに依存しています... – Cepr0

答えて

1

並べ替え機能は疑問ですが、ページネーションも使用できます。

は、我々が持っていると仮定します

@Entity 
public class Service { 

    @Id 
    private Long id; 

    private String name; 

    //... 
} 

@Entity 
public class UserService { 

    @Id 
    private Long id; 

    @ManyToOne   
    User user; 

    @ManyToOne   
    Service service; 

    @ManyToOne   
    Rating rating; 

    //... 
} 

その後、我々は、突起部を作成します。その後、

public interface ServiceRating { 
    Long getServiceId(); 
    String getServiceName(); 
    Long getRatingId(); 
} 

とクエリ方法サポートページネーションを作成:このクエリはありませんので

public interface UserServiceRepo extends CrudRepository<UserService, Long> { 
    @Query("select s.id as serviceId, s.name as serviceName, us.rating.id as ratingId from UserService us join us.service s where us.user.id = ?1") 
    Page<ServiceRating> getServiceRating(Long userId, Pageable pageable); 
} 

を(グループ化を含まない場合は、追加のcountQueryを使用する必要はありません( @Query))。

テスト:

Page<ServiceRating> pages = userServiceRepo.getServiceRating(1L, new PageRequest(0, 10)); 
assertThat(pages.getContent()).hasSize(10)); 

UPDATE

ソートも完璧に取り組んでいます。 ただ、Sortオブジェクトを作成する方向を指定し、(投影からの)名前を提出:

Sort sort = new Sort(Sort.Direction.ASC, "serviceName"); 
userServiceRepo.getServiceRating(1L, new PageRequest(0, 10, sort)); 
+0

@ Cepr0ありがとうございます! – linc01n

+0

@ linc01n「ありがとうございました」は答えを受け入れる/上げることと同じです。それをすることを忘れないでください... – Cepr0

+0

私に思い出させるために感謝します。 – linc01n

関連する問題