java - JPQL——空值到 boolean 值?

标签 java spring spring-data-jpa jpql projection

假设我有一个实体

@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和非常有用的错误消息

The expression is invalid, which means it does not follow the JPQL grammar.

你如何编写这个查询?

最佳答案

我不知道您是否应该运行此查询,但语法的一种修复方法是使用 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();

关于java - JPQL——空值到 boolean 值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58373762/

相关文章:

java - Spring数据JPA |从 @ManyToMany 关系中的 @JoinTable 中删除 MyGroup 时仅删除条目

java - 使用 FIFO 队列和 peek() 方法实现共识协议(protocol)

java - 如何将org.dom4j.io.SAXReader解析的xml文档转换为可视化的Swing树?

java - 通过 Spring 初始化我的工厂

Spring SpEL 选择了错误的方法来调用

java - JPA CriteriaBuilder 泛型错误 : CriteriaQuery<capture#2-of ? > 不适用于参数 (Expression<Long>)

java - 服务器端请求伪造漏洞

通过代理的 Java HttpsURLConnection 在 wget 工作正常时无法工作

java - 如何在@HandleBeforeCreate 处理程序之前对请求作用域bean 调用@PostConstruct?

java - JPA 性能 - SELECT DISTINCT 和/或 Java Set