Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Hibernacja + ON DUPLICATE KEY logika

Hibernate może zgłosić ConstraintViolationException podczas próby wstawienia wiersza, który łamie ograniczenie (w tym ograniczenie unikatowe). Jeśli nie otrzymasz tego wyjątku, możesz otrzymać inny ogólny wyjątek Hibernate - zależy to od wersji Hibernate i zdolności Hibernate do mapowania wyjątku MySQL na wyjątek Hibernate w używanej wersji i typie bazy danych ( Nie testowałem tego na wszystkim).

Wyjątek otrzymasz dopiero po wywołaniu flush() , więc upewnij się, że jest to również w Twoim bloku try-catch.

Byłbym ostrożny przy wdrażaniu rozwiązań, w których najpierw sprawdzasz, czy wiersz istnieje. Jeśli wiele sesji aktualizuje tabelę jednocześnie, możesz uzyskać warunki wyścigu. Dwa procesy odczytują wiersz niemal w tym samym czasie, aby sprawdzić, czy istnieje; oboje wykrywają, że go tam nie ma, a następnie oboje próbują utworzyć nowy wiersz. Jeden zawiedzie w zależności od tego, kto wygra wyścig.

Lepszym rozwiązaniem jest najpierw spróbować wkładki, a jeśli się nie powiedzie, załóżmy, że już tam była. Jednak po pojawieniu się wyjątku będziesz musiał wycofać się, co ograniczy sposób korzystania z tego podejścia.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak umieścić tekst przed polem automatycznego przyrostu w mysql (np. TTT00001)?

  2. log4j2 Menedżer JDBC nie może połączyć się z bazą danych

  3. Czy istnieje narzędzie do analizy statycznej do identyfikacji iniekcji sql dla php/mysql?

  4. Wstawka bazy danych mysql zmienia wszystkie identyfikatory na 4294967295

  5. Model bazy danych EAV, lista rekordów zgodnie z wyszukiwaniem