2011-07-21 42 views
0

我們使用Hibernate連接到AS/400。我們在使用LIKE子句對AS/400 進行查詢時遇到問題。示使用LIKE子句在AS/400上查詢的問題

以下錯誤:

java.sql.SQLException中:LIKE的[SQL0131]操作數不兼容或不是有效

由Hibernate生成我的查詢其汽車:

select tab_parame0_.C1IMCD as C1_560_, tab_parame0_.C1NINB as C2_560_, 
tab_parame0_.C1JXCD as C3_560_, tab_parame0_.C1HLTX as C4_560_, tab_parame0_.C1HMTX as C5_560_, 
tab_parame0_.C1HDST as C6_560_, tab_parame0_.C1NGNB as C7_560_, tab_parame0_.C1NJNB as C8_560_, 
tab_parame0_.C1NFNB as C9_560_, tab_parame0_.C1NHNB as C10_560_, tab_parame0_.C1HCST as C11_560_ 
from RYC1REP tab_parame0_ 
where lower(tab_parame0_.C1HLTX) like lower(?) 
order by tab_parame0_.C1IMCD asc 
fetch first 10 rows only 
+0

您正在使用什麼SQL語句? –

+0

我的查詢是由Hibernate 產生它的自動休眠:選擇tab_parame0_.C1IMCD爲C1_560_,tab_parame0_.C1NINB爲C2_560_,tab_parame0_.C1JXCD爲C3_560_,tab_parame0_.C1HLTX爲C4_560_,tab_parame0_.C1HMTX爲C5_560_,tab_parame0_.C1HDST爲C6_560_, tab_parame0_.C1NGNB如C7_560_,tab_parame0_.C1NJNB如C8_560_,tab_parame0_.C1NFNB如C9_560_,tab_parame0_.C1NHNB如C10_560_,tab_parame0_.C1HCST如C11_560_從RYC1REP tab_parame0_其中較低(tab_parame0_.C1HLTX)等低級(?)通過tab_parame0_.C1IMCD遞增順序只讀取前10行 –

+0

你確定你在填充?在像更低(?)我期望像一條語句查看在AS/400查詢LIKE'%searchfor%'。 –

回答

3

SQL0131表示類型不匹配。

什麼數據類型是tab_parame0_.C1HLTX?什麼樣的數據類型是你的查詢參數?

請包括您的HQL/JPQL查詢源代碼進行比較

您可能必須設置SQL跟蹤以準確查看AS/400正在接收的內容。

How do I obtain trace information from my Java program using the Toolbox?


,我建議你在你的源查詢更改LIKE LOWER(:parameter)LIKE :parameter和使用.toLowerCase()當你設置的參數,看看它是如何工作。

+0

AS400中的數據類型是CHAR,我也發送字符數據 –

+0

我更新了我的答案重新請求您的HQL查詢源代碼並提供一個鏈接以在Toolbox jdbc驅動程序中啓用跟蹤。 – jamesallman

+0

我沒有使用HQL我正在使用打開的JPA,並且由JPA生成的查詢是:select tab_parame0_.C1IMCD as C1_560_,tab_parame0_.C1NINB as C2_560_, tab_parame0_.C1JXCD as C3_560_,tab_parame0_.C1HLTX as C4_560_,tab_parame0_ .C1HMTX如C5_560_, tab_parame0_.C1HDST如C6_560_,tab_parame0_.C1NGNB如C7_560_,tab_parame0_.C1NJNB如C8_560_, tab_parame0_.C1NFNB如C9_560_,tab_parame0_.C1NHNB如C10_560_,tab_parame0_.C1HCST如C11_560_ 從RYC1REP tab_parame0_ ,其中較低的( tab_parame0_.C1HLTX)like lower(?) order by tab_parame0_.C1IMCD asc 只讀取前10行 –