この問題を解決するエレガントな方法を見つけました。「coalese」などの sql opeartor があります (いくつかの説明: http://www.1keydata.com/sql/sql-coalesce.html )。クエリに任意のパラメーターを渡すことができ、nullパラメーターが確実に無視されるようにします。
私のDAOインターフェースの例(Spring data-jpa、MySQL):
@Query("select b from Book b where " +
"coalesce(b.name, '') like concat('%', :name, '%') " +
"and coalesce(b.author, '') like concat('%', :author, '%') " +
"and coalesce(b.category, '') like concat('%', :category, '%') " +
"and coalesce(b.publisher, '') like concat('%', :publisher, '%') " +
"and (b.available = :available1 or b.available = :available2)")
public Page<Book> findByParams(
@Param("name") String name
, @Param("author") String author
, @Param("category") String category
, @Param("publisher") String publisher
, @Param("available1") Boolean available1, @Param("available2") Boolean available2
, Pageable pageReq);
お役に立てれば