一次执行多个本机查询

我想知道是否可以在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()

另一种方法是使用CASE语句。 例如:

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

我要说,你必须至少用单引号包含X和Y.

您可以做的是使用批处理语句,基本上在执行查询之前调用addBatch(string query); 方法,然后当你的所有查询都在批处理中时,只需调用executeBatch()方法。 这将按照您添加mto批次的顺序为您执行所有操作。

另外:你的语法错误是你需要加上引号'Y''X'