我想知道是否可以在Hibernate(3.2)中执行一次SQLQuery#executeUpdate()
调用来执行多个以分号分隔的SQL更新查询。
我的字符串包含多个这样的更新:
String statements = "UPDATE Foo SET bar=1*30.00 WHERE baz=1;
UPDATE Foo SET bar=2*45.50 WHERE baz=2;...";
我正在尝试
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
如果我手动执行statements
的内容,我没有错误,所以我假设多个以分号分隔的查询在Hibernate或JDBC中的某处造成了麻烦。
分割statements
字符串并为每一行单独执行createSQLQuery(statement).executeUpdate()
是否更好?
答案 0 :(得分:4)
另一种方法是使用CASE语句。例如:
UPDATE Foo
SET bar =
CASE baz
WHEN 1 THEN 'X'
WHEN 2 THEN 'Y'
END CASE
WHERE baz in (1,2)
答案 1 :(得分:1)
你必须至少用单引号包含X和Y,我会说。
答案 2 :(得分:1)
您可以做的是使用批处理语句,基本上在执行查询之前调用addBatch(string query);
方法,然后当批处理中的所有查询都调用executeBatch()
方法时。这将按照您添加mto批次的顺序为您执行所有操作。
另外:语法中的错误是您需要加上引号'Y'
或'X'