Mysql
 sql >> база данни >  >> RDS >> Mysql

Хибернация:не можа да изпълни собствена заявка за групова манипулация

Когато имате параметризирани заявки в бази данни (подготвени оператори), присвояването на стойности на параметрите НЕ ТРЯБВА да променя структурата и пътя на изпълнение на заявката (в противен случай базите данни не ги третират като параметризирани заявки и ще хвърлят изключение).

Ето защо не можете да имате подготвени изрази за заявки като:

  • select * from myTable order by ?
  • select id, f1, ? from myTable
  • select * from ? .

тъй като присвояването на стойност на всеки параметър променя пътя на изпълнение на заявката (не забравяйте, че заявката на подготвените изрази се анализира веднъж и води до един път на изпълнение).

Същите правила важат за анализатора на заявки за хибернация, не трябва да присвоявате стойност на параметър, която променя структурата на заявката.

Присвояване на низ със стойности 1, 2, 3 към ТРЯБВА-ДА-БЪДЕ-А-ЧИСЛО параметри е точно същото, всъщност първата заявка ще бъде преведена точно както update weight_note_receipt set pledge_id =:pledge where wn_id = :wns но вторият ще бъде преведен като update weight_note_receipt set pledge_id =:pledge where (wn_id = :x1 or wn_id = :x2 or wn_id = :x3) , очевидно различни заявки с различни пътища на изпълнение.

Така че дори Hibernate да не хвърли изключение, вашата база данни ще го направи.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Мигрирайте база данни от Postgres към MySQL

  2. MySQL Binary Storage, използвайки BLOB VS OS файлова система:големи файлове, големи количества, големи проблеми

  3. JDBC - Изявление, PreparedStatement, CallableStatement и кеширане

  4. Как да извикам моите C++ двоични файлове чрез CGI интерфейса?

  5. Как да намеря всички низове с главни букви в MySQL таблица?