2

次のコードを使用して、データベースにクエリを実行 (試行) しています。

Query query = session.createQuery("from Trace where service = :service");
query.setParameter("service", clientRequest[0]);

clientRequest[0] は文字列の配列からのもので、サービス変数は MySQL データベースの VARCHAR(45) にマップされた POJO の文字列です。

このコードを実行すると、Hibernate は実行された SQL クエリを次のように表示します。

Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=?

これにより、 clientRequest[0] の値がパラメーターとして正しく設定されていないと思います。

clientRequest[0] に有効な文字列が含まれていることを確認しました。クエリを作成する他の方法を試しましたが、どれも機能しませんでした。サービスは常に「?」として表示されますが、明らかな方法を使用すると、次のようになります。

Query query = session.createQuery("from Trace where service = 21");

それは当然の正しい応答を与えます

Hibernate: select trace0_.traceId as traceId0_, trace0_.service as service0_, trace0_.longitude as longitude0_, trace0_.latitude as latitude0_, trace0_.timestamp as timestamp0_ from trace trace0_ where trace0_.service=21

setParamater が正しく機能しない原因は何ですか?

4

1 に答える 1

6

ログに出力されることが期待されます。Hibernate はクエリ文字列にパラメータを記録しません。パラメータが正しく設定されています。パラメータが設定されていない場合、代わりに例外が表示されます。

パラメータの値も記録したい場合は、ここからいくつかの手順を見つけることができます。

于 2012-06-11T17:51:57.100 に答える