0

休止状態を介してネイティブ SQL クエリを実行したいと思います。

dbs.createSQLQuery("UPDATE USERS SET :balanceType = :newBalance WHERE UKEY = :ukey")
    .setString("balanceType", type.toString())
    .setBigDecimal("newBalance", newBalance)
    .setLong("ukey", uKey).executeUpdate();

これは :balanceType バインディングのために失敗します。

私は例外を受け取ります:

org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
org.hibernate.exception.SQLGrammarException: could not execute native bulk manipulation query
java.sql.SQLException: ORA-01747: invalid user.table.column, table.column, or column specification

org.hibernate.exception.NestableDelegate@431d9f05
could not execute native bulk manipulation query
UPDATE USERS SET :balanceType = :newBalance WHERE UKEY = :ukey
java.sql.SQLException: ORA-01747: invalid user.table.column, table.column, or column specification

String.format を使用してパラメータを文字列に埋め込むと、正常に動作します!

私の構文の何が問題なのですか??

ありがとう!

4

1 に答える 1

0

balanceTypeはパラメーターではないため、バインドできません。文字列連結を使用して列名を連結する必要があります。

dbs.createSQLQuery("UPDATE USERS SET " + type.toString() + " = :newBalance WHERE UKEY = :ukey")
    .setBigDecimal("newBalance", newBalance)
    .setLong("ukey", uKey).executeUpdate();
于 2013-04-18T09:02:44.470 に答える