JPQLで複数の項目をもつValueObjectを条件にクエリする

よく忘れるのでメモ。

ValueObject(条件クラス)

public class FooCondition {

    private final String col1;
    private final String col2;

    public FooCondition(String col1, String col2) {
        this.col1 = col1;
        this.col2 = col2;
    }

    // getterは省略
}

クエリ

public interface FooRepository extends JpaRepository<Foo, FooPK> {

   @Query("SELECT x FROM Foo x "
            + "WHERE x.col1 = :#{#cond.col1} "
            + "AND x.col2 = :#{#cond.col2}")
    List<Foo> findByCondition(@Param("cond") FooCondition condition);

}