sql >> Databasteknik >  >> RDS >> Mysql

Hibernate + PÅ DUBLIKATKEY logik

Hibernate kan skapa en ConstraintViolationException när du försöker infoga en rad som bryter en begränsning (inklusive en unik begränsning). Om du inte får det undantaget kan du få något annat generellt Hibernate-undantag - det beror på versionen av Hibernate och Hibernates förmåga att mappa MySQL-undantaget till ett Hibernate-undantag i den version och typ av databas du använder ( Jag har inte testat det på allt).

Du kommer bara att få undantaget efter att ha anropat flush() , så du bör se till att detta också finns i ditt försöksfångstblock.

Jag skulle vara försiktig med att implementera lösningar där man kontrollerar att raden finns först. Om flera sessioner uppdaterar tabellen samtidigt kan du få ett tävlingsvillkor. Två processer läser av raden nästan samtidigt för att se om den finns; de upptäcker båda att det inte finns där, och sedan försöker de båda skapa en ny rad. En kommer att misslyckas beroende på vem som vinner loppet.

En bättre lösning är att försöka infoga först och om det misslyckas, anta att det redan fanns där. Men när du väl har ett undantag måste du rulla tillbaka, så det kommer att begränsa hur du kan använda detta tillvägagångssätt.



  1. Förvandla en kommaseparerad sträng till individuella rader

  2. En teknisk jämförelse:Microsoft Access 2016 vs SQL Server 2016

  3. Hur man skapar genväg för SSMS och ansluter till standard SQL Server automatiskt - SQ:Server / TSQL Tutorial Del 4

  4. Uppdatera tidsstämpelkolumnen i applikation eller databas?