2015-02-25 2 views
0

Я работаю с Hibernate 4.1.7 и драйвером MySQL. У меня очень простой стол, table1, который имеет 2 колонки, id и этикетка. В этой таблице есть 2 строки.hibernate executeUpdate неправильное количество затронутых строк

Моя проблема: когда я обновляю этикетки для всех строк, она сначала сообщает мне, что «затронуты 2 строки». Отлично. Когда я обновляю те же строки с одинаковыми значениями, он также сообщает мне, что «затронуты 2 строки». Неправильно, он должен сказать мне «0 строк затронуты», поскольку я уже обновил данные.

Вот код для этого:

public static void Integer doUpdate(){ 
    final Query query = hbmSesssion.createSQLQuery("UPDATE table1 SET label = 'toto'"); 
    final Integer result = query.executeUpdate(); 
    hbmSession.getTransaction().commit(); 
} 

В моей главной:

System.out.println("nb updates: " + doUpdate()); 
//gives "nb updates: 2", that's OK 
//then, I check in the Database, the update is ok, all the lines have 'toto' values 
System.out.println("nb updates: " + doUpdate()); 
//gives "nb updates: 2", that's wrong! 

Я пропускаю что-то важное в документации? У меня та же проблема с явными утверждениями JDBC, поэтому я подозреваю, что неправильно использовал драйвер Java/MySQL. Конечно, если я отправлю те же 2 запроса в PhpMyAdmin, он сначала сообщает мне «2 строки обновлены», а затем «0 строк обновлено».

+0

Извините за редактирование моего поста, но я странно, что никто не имеет ответа на это. Обновление таблицы SQL через Java - довольно обычная задача ... – toni07

ответ

1

этот код:

public static void Integer doUpdate(){ 
    final Query query = hbmSesssion.createSQLQuery("UPDATE table1 SET label = 'toto'"); 
    final Integer result = query.executeUpdate(); 
    hbmSession.getTransaction().commit(); 

}

Сообщает: вы должны обновлять в table1 все строки поставить в значение поле метки Toto

Если вы хотите уменьшить количество затронутых строк, вы должны добавьте условие WHERE.

Например, вы можете добавить:

UPDATE table1 SET label = 'toto' where label <> 'toto' 

С верхним запросом на первый UPDATE вы будете иметь 2 ряда пострадавшие и на вторые 0 строках

+0

Спасибо за ваше время, но это действительно не вопрос. Я знаю, что делает инструкция обновления! – toni07

+0

@ toni07: Если вы запустите на MySql эти запросы, у вас будет два раза 2 строки, затронутые –

+0

, конечно, нет. На PhpMyAdmin у меня есть «2 строки», а затем «0 строк», как я упоминал в своем сообщении. Более того, тот же код, что и Java, написанный на PHP (mysql_query), дает точный результат «2 строки», а затем «0 строк». – toni07

Смежные вопросы