Можно ли выразить приведенный ниже запрос, используя метод запроса JPA?
@Query(
value =
"SELECT a FROM #{#entityName} a"
+ "LEFT JOIN Other o ON a.otherId = o.id"
+ "ORDER BY CASE WHEN o.foo = 'A' then 1"
+ " WHEN o.foo = 'S' then 2"
+ " WHEN o.foo = 'D' then 3"
+ " ELSE 4"
+ " END, a.createdDate DESC NULLS LAST")
List<T> findAllCustomSorted();
Так что-то вроде этого метода запроса
List<T> findAll(Sort sort);
Называется примерно так
String fooProperty = "CASE WHEN o.foo = 'A' then 1"
+ "WHEN o.foo = 'S' then 2"
+ "WHEN o.foo = 'D' then 3"
+ "ELSE 4"
+ END;
String dateProperty = "createdDate";
repo.findAll(
new Sort(
new Order(Direction.ASC, fooProperty, NullHandling.NULLS_LAST),
new Order(Direction.DESC, dateProperty, NullHandling.NULLS_LAST)));
Теперь это не работает.
Но я нашел что-то под названием JpaSort.unsafe()
и JpaPath
, поэтому мне было интересно, возможно ли то, что я пытаюсь сделать, прежде чем я спущусь в кроличью нору.