2011-07-18 16 views
9

Hibernate(3.2)でSQLQuery#executeUpdate()コールを1つ使用して複数のセミコロンで区切られたSQL更新クエリを実行できるかどうかは疑問です。複数のネイティブクエリを一度に実行する

私はこのような複数の更新を含む文字列があります:私は

Query query = session.createSQLQuery(statements); 
query.executeUpdate(); 

を行うしかし、私は実行すると、次のエラー

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 
You have an error in your SQL syntax; check the manual that corresponds to 
your MySQL server version for the right syntax to use near 
'UPDATE Foo SET bar=Y WHERE ' at line 3 

を得続けるためにしようとしている

String statements = "UPDATE Foo SET bar=1*30.00 WHERE baz=1; 
        UPDATE Foo SET bar=2*45.50 WHERE baz=2;..."; 

を内容は手でstatements私はエラーがないので、私は複数のsemicオロンで区切られたクエリは、HibernateやJDBCのどこかで問題を引き起こしています。

statements文字列を分割し、行ごとに個別にcreateSQLQuery(statement).executeUpdate()を実行する方が良いですか?

+0

例のコードは少しオフになっていましたが、実際には値を計算していますが、引用符を付けずにOKです。 – Janne

答えて

1

あなたは少なくともXとYを一重引用符で囲む必要があります。

1

基本的には、クエリの実行前にaddBatch(string query);メソッドを実行してから、すべてのクエリがバッチ内にある場合は、executeBatch()メソッドを呼び出してください。それはバッチにmを追加した順番であなたのためにすべてを実行します。

も:あなたの構文でのエラーは、引用符'Y'または'X'

+0

'addBatch()'と 'executeBatch'は' java.sql.Statement'からのものですが、ポスターはHibernateを使用しています。 –

+0

私が正しく理解していれば、彼はJDBCの問題の考えられる原因(例えば、スローされた例外はJDBCコネクタに属しています)をJDBCで解決するかのように言及しました。 Janneは、JDBCが受け入れられればそれをクリアすることができます。 –

+0

Nicolaeがそうです、これは本当に私が探している答えではありません。私はまだHibernateのSQLQueryを使用したいです – Janne

4

代替CASE文を使用することであるに入れる必要はあります。例:

UPDATE Foo 
    SET bar = 
    CASE baz 
     WHEN 1 THEN 'X' 
     WHEN 2 THEN 'Y' 
    END CASE 
WHERE baz in (1,2) 
+0

完璧。あなたは私の日を救った!あなたは英雄です:D –

関連する問題