に、私は2つのエンティティと投影して、残りのリポジトリを持つことにより、順時に参照フィールドのソートプロパティを定義します。 /人/?投影=詳細&ソート=言語はJPQL
それはlanguage.id
ことによってそれを並べ替えしようとしているというSQLを生成選択人0_.id as i ... order by language1_.id asc上限?
JPAには、明示的に指定することなくソートに異なるデフォルトプロパティを使用する方法がありますか?
に、私は2つのエンティティと投影して、残りのリポジトリを持つことにより、順時に参照フィールドのソートプロパティを定義します。 /人/?投影=詳細&ソート=言語はJPQL
それはlanguage.id
ことによってそれを並べ替えしようとしているというSQLを生成選択人0_.id as i ... order by language1_.id asc上限?
JPAには、明示的に指定することなくソートに異なるデフォルトプロパティを使用する方法がありますか?
まず、あなたの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;
}
いつでも言語でソートする必要がある場合にのみ動作します。リクエストが_/api/persons /?projection = details&sort = name_の場合はどうなりますか? –
別の名前付きクエリを追加するだけです。 –
春データ-残りはプロパティトラバーサルを使用していますあなたのエンティティオブジェクトに。 あなたの場合、PersonとLanguageの場合、プロパティ "name"に名前の衝突があります。 この問題を解決するには、ソートパラメータで正しいプロパティを参照する必要があります。 言語名でソートするには、/ api/persons /?projection = details & sort = language_name あなたの名前でソートするにはurlパラメータshoud look/api/persons /?projection =詳細& sort = person_name
検索/ソートのバインディングをカスタマイズする方法の例があります。https://spring.io/blog/2015/09/04/what- s-new-in-spring-data-release-gosling#querydsl-web-support –