sql >> Database >  >> RDS >> Mysql

Slaapstand + ON DUPLICATE KEY logica

Hibernate kan een ConstraintViolationException . veroorzaken wanneer u probeert een rij in te voegen die een beperking overtreedt (inclusief een unieke beperking). Als u die uitzondering niet krijgt, krijgt u mogelijk een andere algemene Hibernate-uitzondering - dit hangt af van de versie van Hibernate en het vermogen van Hibernate om de MySQL-uitzondering toe te wijzen aan een Hibernate-uitzondering in de versie en het type database dat u gebruikt ( Ik heb het niet op alles getest).

U krijgt de uitzondering alleen na het aanroepen van flush() , dus zorg ervoor dat dit ook in je try-catch-blok staat.

Ik zou voorzichtig zijn met het implementeren van oplossingen waarbij u eerst controleert of de rij bestaat. Als meerdere sessies de tabel tegelijkertijd bijwerken, kunt u een raceconditie krijgen. Twee processen lezen de rij op bijna hetzelfde moment om te zien of deze bestaat; ze detecteren allebei dat het er niet is, en dan proberen ze allebei een nieuwe rij te maken. Eén zal mislukken, afhankelijk van wie de race wint.

Een betere oplossing is om eerst de invoeging te proberen en als het mislukt, neem dan aan dat het er al was. Zodra u echter een uitzondering heeft, moet u terugdraaien, dus dat beperkt de manier waarop u deze aanpak kunt gebruiken.



  1. SELECT min en max waarde uit een deel van een tabel in MySQL

  2. MySQL - Tussen maanden (in plaats van een tijdstempel)

  3. Oracle SQL:meer dan 1000 items in een IN-clausule gebruiken?

  4. Over SQLite