1

に、私は2つのエンティティと投影して、残りのリポジトリを持つことにより、順時に参照フィールドのソートプロパティを定義します。 /人/?投影=詳細&ソート=言語はJPQL

それはlanguage.id

ことによってそれを並べ替えしようとしているというSQLを生成

選択人0_.id as i ... order by language1_.id asc上限?

JPAには、明示的に指定することなくソートに異なるデフォルトプロパティを使用する方法がありますか?

+0

検索/ソートのバインディングをカスタマイズする方法の例があります。https://spring.io/blog/2015/09/04/what- s-new-in-spring-data-release-gosling#querydsl-web-support –

答えて

0

まず、あなたのPersonRepositoryインタフェースでfindAll()メソッドをオーバーライド:

public interface PersonRepository extends PagingAndSortingRepository<Person, Long> { 
    @Override 
    @Query 
    public Iterable<User> findAll(); 
} 

は、その後、あなたの Userエンティティクラスに名前付きクエリを追加します。あなたはそれを構成して

@Entity 
@NamedQuery(name = "User.findAll", query="select p from Person p order by p.language.name") 
public class Person { 
    @Id 
    @GeneratedValue 
    private Long id; 

    String name; 

    @ManyToOne 
    Language language; 
} 
+0

いつでも言語でソートする必要がある場合にのみ動作します。リクエストが_/api/persons /?projection = details&sort = name_の場合はどうなりますか? –

+0

別の名前付きクエリを追加するだけです。 –

1

春データ-残りはプロパティトラバーサルを使用していますあなたのエンティティオブジェクトに。 あなたの場合、PersonとLanguageの場合、プロパティ "name"に名前の衝突があります。 この問題を解決するには、ソートパラメータで正しいプロパティを参照する必要があります。 言語名でソートするには、/ api/persons /?projection = details & sort = language_name あなたの名前でソートするにはurlパラメータshoud look/api/persons /?projection =詳細& sort = person_name