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

Хибернация + логика ON DUPLICATE KEY

Hibernate може да предизвика ConstraintViolationException когато се опитате да вмъкнете ред, който нарушава ограничение (включително уникално ограничение). Ако не получите това изключение, може да получите някакво друго общо изключение за хибернация - зависи от версията на хибернация и способността на хибернацията да съпоставя изключението MySQL с изключение за хибернация във версията и типа база данни, която използвате ( Не съм го тествал за всичко).

Ще получите изключението само след извикване на flush() , така че трябва да се уверите, че това също е във вашия блок try-catch.

Бих внимавал при внедряването на решения, при които първо проверявате дали редът съществува. Ако няколко сесии актуализират таблицата едновременно, можете да получите условие за състезание. Два процеса четат реда почти по едно и също време, за да видят дали съществува; и двамата откриват, че го няма, и след това и двамата се опитват да създадат нов ред. Един ще се провали в зависимост от това кой ще спечели състезанието.

По-доброто решение е първо да опитате вмъкването и ако не успее, приемете, че вече е било там. Въпреки това, след като имате изключение, ще трябва да се върнете назад, така че това ще ограничи начина, по който можете да използвате този подход.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Вмъкване на шестнадесетична стойност в MySQL

  2. Mysql рекурсивно изваждане и умножение на групирани стойности

  3. Как да мигрирам лесно от MySQL към PostgreSQL?

  4. codeigniter добавяне на IS NULL в find_in_set

  5. Не можа да се свърже:Загубена връзка с MySQL сървъра при „четене на първоначален комуникационен пакет“, системна грешка:0