我有以下問題。我想在我的表中的一列上過濾,要么是真,要么是假,然后只給我日期大于 xxx 的條目。因此,基本上將所有有效客戶都歸還給我,并回傳無效且激活日期大于 3.5 年的所有客戶。
| 姓名 | is_customer | 激活日期 |
|---|---|---|
| 皮特 | 真的 | 2021.02.02 |
| 山姆 | 錯誤的 | 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
我已經嘗試過調整支架位置。有人可能對我有類似的問題或解決方法嗎?
uj5u.com熱心網友回復:
您可能需要在 WHERE 子句之前放置一個空格,否則您的字串將不是有效的 JPQL:
"SELECT c FROM CustomerBE cWHERE (c.isCustomer= true) O ..."
我不確定這是否是您報告的問題,但這也是一個需要解決的問題。
uj5u.com熱心網友回復:
好的,現在修好了。問題是 postgre Part "CURRENT_DATE INTERVAL '3.5 years'" 必須用 :filterDate 替換它并通過引數設定它。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/311592.html
標籤:爪哇 PostgreSQL jpa 知乎
上一篇:如何分隔和旋轉整數中的數字?
