JPQL - от нуля до логического значения? - PullRequest
0 голосов
/ 14 октября 2019

Допустим, у меня есть сущность

@Entity
@Table(name = "foos")
class Foo{
   @Id
   @Generatedvalue(strategy = IDENTITY)
   private Long id;

   @ManyToOne
   @JoinColumn(name = "bar_id")
   private Bar bar;

   ...
}

и проекция, которая должна дать мне id и boolean, указывающие, имеет ли экземпляр Bar:

interface FooProjection{
    String getId();
    Boolean hasBar();
}

Как вы пишете JPQL-запрос?

Я попытался

@Query(
    "SELECT"
    "   f.id,"
    "   (f.bar IS NOT NULL) AS bar"
    " FROM Foo f"
)
List<FooProjection> findProjections();

, который дал мне org.eclipse.persistence.exceptions.JPQLException с очень полезным сообщением об ошибке

Выражение недопустимо, что означает, что оно не соответствует грамматике JPQL.

Как вы пишете этот запрос?

1 Ответ

3 голосов
/ 14 октября 2019

Я не знаю, следует ли выполнять этот запрос, как он есть, но одним из исправлений синтаксиса было бы использование выражения CASE:

@Query(
    "SELECT"
    "   f.id,"
    "   CASE WHEN f.bar IS NOT NULL THEN TRUE ELSE FALSE END AS bar"
    " FROM Foo f"
)
List<FooProjection> findProjections();
...