6

MySQL 5.0 データベース (ORM として Hibernate 4) に対して、JDBC 経由でカスタム変数を含むクエリを実行しようとしています。

SET @rownum := 0; SELECT rnum FROM (
    SELECT (@rownum := @rownum + 1) AS rnum, col_name_a
    FROM table_name
    WHERE (col_name_b IS NULL  OR col_name_b != 'USER' )  ORDER BY col_name_a) c
WHERE col_name_a = :aValue

最初SET @rownum := 0;は変数をリセットするために必要ですが、そこにはコロンは必要ありません (この質問で提案されているようにallowMutilQuery=trueを設定しました)。

問題はSELECT、私が取得し続ける次の場所にあります。

org.hibernate.QueryException: パラメータプレフィックス ':' の後にスペースを入れることはできません

これを回避する方法はありますか?以外の方法を使用する必要がありますか

javax.persistence.Query q = EntityManager instance>.createNativequery(String)

q.setParameter(<param name>, <param value>)

?

4

1 に答える 1

8

ハイバネートでは、コロンのエスケープは:バックスラッシュで行われます:

SET @rownum \:= 0; SELECT rnum FROM ( ...

またはJavaで:

String sql = "SET @rownum \\:= 0; SELECT rnum FROM ( ...";
于 2014-01-21T16:36:27.437 に答える