Spring Data JPA Используйте синтаксис SpEL для условного построения запроса - PullRequest
0 голосов
/ 09 октября 2018

Я пытался построить запрос в зависимости от логического @Param, и сложность в том, что я строю конец запроса без использования классического оператора (=, <,> ...).

Для примера предположим, что я хочу получить все мои объекты Sales, которые не связаны с объектом Account (если я передаю false в @Param) или которые связаны с Account (если я передаю true вthe @Param):

@Query("SELECT sale .... 
 WHERE sale.account :#{isbound ? NOT NULL : IS NULL}")
public List<Sale> getSales(@Param("isbound") boolean isBound);

Я попробовал несколько синтаксисов, основанных на официальной документации Spring (https://spring.io/blog/2014/07/15/spel-support-in-spring-data-jpa-query-definitions),, но все их примеры работают с оператором перед выражением, например: entity =# {the_expression}.

Кто-то когда-то пробовал это и может дать мне хороший способ написать это? thx!

1 Ответ

0 голосов
/ 09 октября 2018

Переформулируйте код запроса, как показано ниже:

@Query("SELECT sale .... 
        WHERE (true = :isbound and sale.account is not null)
          or (false = :isbound and sale.account is null)")
public List<Sale> getSales(@Param("isbound") boolean isBound);
...