1. ホーム
  2. spring

[解決済み] SpringデータのJPAクエリでパラメータプロパティを使用する

2023-02-17 13:38:12

質問

入力パラメータのプロパティをクエリパラメータとして使用するSpring data JPAクエリを宣言する最も簡単な方法は何ですか?

例えば、エンティティクラスがあるとします。

public class Person {
    @Id
    private long id;

    @Column
    private String forename;

    @Column
    private String surname;
}

と別のクラスがあります。

public class Name {
    private String forename;
    private String surname;

    [constructor and getters]
}

... では、以下のようにSpringのデータリポジトリを書きたいと思います。

public interface PersonRepository extends CrudRepository<Person, Long> {
    @Query("select p from Person p where p.forename = ?1.forename and p.surname = ?1.surname")
    findByName(Name name);
}

...しかし、Springデータ/JPAはプロパティ名を ?1 パラメータにプロパティ名を指定することを嫌います。

最もすっきりした代替案は何ですか?

どのように解決するのですか?

このリンクが役に立ちます。Spring Data JPA M1ではSpEL式がサポートされています。似たような例としては

@Query("select u from User u where u.firstname = :#{#customer.firstname}")
List<User> findUsersByCustomersFirstname(@Param("customer") Customer customer);

https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions