JPA нулевые параметры

Мне нужно выбрать все строки, которые соответствуют параметру или получить все из них, если он нулевой

Я (не) нашел решение, читая документацию Spring Data - Пример 21. Использование различных ограничений обнуляемости

Пробовал пример с использованием аннотации @Nullable , но все еще не работает, вот код

// just a part of entity LotMaster 
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "lot_master_gen")
@SequenceGenerator(name = "sq_lot_master_gen", sequenceName = "sq_lot_master", allocationSize = 1)
@Column(name = "lot_id")
private Long id;

//repository extends JpaRepository<LotMaster, Long>
@Nullable
Page<LotMaster> findAllById(@Nullable Long id, Pageable p);

Запрос:

SELECT
   *
FROM
   (
      SELECT
         lot0_.lot_id              AS lot1_2_,
         lot0_.qty                 AS qty_2_,
         lot0_.version             AS version8_2_,
         lot0_.username            AS username15_2_
      FROM
         lot_master lot0_
      WHERE
         lot0_.lot_id IS NULL
   )
WHERE
   ROWNUM <= ?

Как вы видите, он использует нулевое значение в качестве условия, а не игнорирует его

Pic Документация

Как это возможно? Любая идея без CriteriaApi или использования @Query. Моя идея состоит в том, чтобы добавить еще несколько параметров и использовать производный запрос.

Возможно связанный DATAJPA-209

Я понимаю, что использование id в качестве примера сбивает с толку, извините за это. Однако, если я использую другое поле, такое как qty, у меня должна быть возможность поиска даже с нулем. В форме несколько полей, которые можно оставить empy. Было бы неплохо реализовать такую ​​реализацию, как @RequestParam с обязательными или defaultValue параметрами или просто @Nullable работает

Всего 1 ответ


Вам нужно будет найти findAllByIdOrId(@Nullable Long id, Long id2) и передать null качестве одного из параметров. Как-то скучно и проще с @Query .

Другой подход заключается в том, чтобы сделать findAllByIdOrIdIsNull(Long id) но это приведет к


Есть идеи?

10000