【发布时间】:2021-12-01 18:03:57
【问题描述】:
我有以下问题。我想过滤我表中的一列是否为真或如果为假,则只给我日期大于 xxx 的条目。因此,基本上将每个有效客户返回给我,并返回所有无效且激活日期大于 3.5 年的客户。
| name | is_customer | activation_date |
|---|---|---|
| Pete | True | 2021.02.02 |
| Sam | False | 2021.02.02 |
我在我的 psql 控制台中尝试了查询,一切正常。但是,当我尝试将其调整为在我的 JPA 实体中与 @NamedQueries 一起使用时,无法验证查询(无论是在 Intellij 中还是在运行代码时)。
在 Postgres 中查询(工作正常):
SELECT * FROM customer c
WHERE (c.is_customer = true) OR (c.is_customer = false AND c.activation_date > CURRENT_DATE + INTERVAL '3.5 years');
用 Java 查询(不工作):
@NamedQuery(name = CustomerBE.NAMED_QUERY,
query = "SELECT c FROM CustomerBE c "
+ "WHERE (c.isCustomer= true) OR (c.isCustomer= false AND c.activationDate > CURRENT_DATE + INTERVAL '3.5 years')"
)
Intellij 错误:'(', <expression> or identifier expected, got '('
JPQL 错误:
Exception Description: Syntax error parsing [SELECT c FROM CustomerBE c WHERE (c.isCustomer= true) OR (c.isCustomer= false AND c.activationDate > CURRENT_DATE + INTERVAL '3.5 years'].
[41, 297] The expression is not a valid conditional expression.
[297, 298] The query contains a malformed ending
我已经尝试过调整支架的位置。 有人可能对我有类似的问题或解决方法吗?
【问题讨论】:
标签: java postgresql jpa jpql