我需要將LIKE運算符轉換爲JPA查詢。我需要將它用於String以外的其他類型,但JPA標準API允許我僅添加String參數。我嘗試使用.as(String.class)
,但某些內容失敗,並嘗試從底層的Oracle
調用CAST
函數,該函數對我來說再次失敗,原因不明。包含LIKE的JPQL查詢轉換爲條件
我試着在JPQL中編寫查詢,它按預期工作。這是查詢:
SELECT p from CustomerOrder p where p.id like '%62%'
UPDATE:
查詢必須建立在一個通用的方式,因爲它是過濾,所以它需要在運行時創建。對已經創建的查詢我試圖添加LIKE條款是這樣的:
query.where(builder.like(selectAttributePath.as(String.class), "%"+filterValue.toString().toLowerCase()+"%"));
但這種崩潰與此異常:
org.hibernate.hql.internal.ast.QuerySyntaxException: expecting CLOSE, found '(' near line 1, column 156 [select distinct generatedAlias0.id from de.brueckner.mms.proddetailschedact.data.CustomerOrder as generatedAlias0 where cast(generatedAlias0.id as varchar2(255 char)) like :param0]
我執行相同的查詢直接甲骨文使用SQLDeveloper,所以從這個角度來看應該是合理的。所以問題在於Hibernate是個問題。有關如何修復它的任何建議?
如何使用JPA Criteria編寫此查詢?
已經這樣做了,代碼不編譯:找不到方法「像(表達式 X,表達模式)」。方法簽名是:'like(表達式 x,表達式模式)' –
@ user503413您是否嘗試過明確地轉換它,如'Long.valueOf(id).toString()'。 –
這可能會工作,但主題是一個更廣泛的主題的一部分,所以標準是以通用的方式構建的,因此我不會總是知道它是一個ID還是別的什麼 –