2016-11-05 6 views
1

openJpaクエリで長さ(ze.string)が > 2を使用しています。しかし、私はレコードを取得しています長さの操作を行う際に、プレーンクエリでOpenJpa JPQLで文字列の長さを見つける方法

SQLCODE=-440, SQLSTATE=42884, SQLERRMC=CHAR_LENGTH;FUNCTION, DRIVER=3.53.95 {prepstmnt 1776269692 SELECT t0.f1, t0.f2, t0.f3, t0.f4, t0.f5, t0.f6, t0.f7, t0.f8, t0.f9, t0.f10, t0.f11, t0.f12, t0.f13, t0.f14, t0.f15, t0.f16, t0.f17 FROM table t0 WHERE (t0.f1 = ? AND CHAR_LENGTH(?) > ? AND ..... 

を取得しますが、その動作していないJPAを使用しています。私は見たHere使用サイズそれは動作しません。フィールドはvarcharとdb2です。過去1時間から試してみる。

答えて

0

DB2は、SQL関数LENGTHを使用する必要があり、まだOpenJPAが間違ってSQL関数CHAR_LENGTH(したがって、エラーメッセージを使用して、あなたのJPQLを変換しているようだ - ないというDB2が間違っているものを言って明確なメッセージを与え、どのようなSQLCODEを知っています= -440は検索する必要はありません!!)。 JPAプロバイダにバグを報告してください。

は、あなたが底部またはこれに得るためにあなたのエンティティ、persistence.xmlの、およびクエリの詳細を与える必要があるだろうhttps://www.ibm.com/support/knowledgecenter/SSEPGG_9.7.0/com.ibm.db2.luw.sql.ref.doc/doc/r0000818.html

0

を参照してください。しかし、OpenJPAがDB2のLENGTHではなくCHAR_LENGTHをどのように使用するかはわかりません。私に説明させてください。あなたがここにDBDictionaryを見れば:

https://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/DBDictionary.java?view=markup

あなたは次のように、それは "stringLengthFunction" と呼ばれるものを定義して見ることができます:

パブリック文字列stringLengthFunction = "CHAR_LENGTH({0})";

これは個々の辞書(データベース設定)に使用する文字列長関数です。しかし、DB2のために、AbstractDB2Dictionaryは、ここで参照:

https://svn.apache.org/viewvc/openjpa/branches/2.2.x/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/sql/AbstractDB2Dictionary.java?view=markup

オーバーライドをこの次のよう

stringLengthFunction = "LENGTH({0})"。

この場合、DB2の場合はLENGTHを使用する必要があります。私は、次の簡単なクエリました:

"MyEntity私からme.id選択をどこ長(me.name)> 2"

とDB2を使用してOpenJPAの上でそれを実行して、私はこれだ:

を、MYENTITYのT0(BIGINT AS CAST(LENGTH(t0.ID))> CAST(?BIGINT AS))のparams =(長)2]

おかげFROM t0.IDを選択

ヒースTHOMANN

関連する問題