sql >> Database teknologi >  >> RDS >> Mysql

Hibernate + ON DUPLICATE KEY logik

Hibernate kan kaste en ConstraintViolationException når du forsøger at indsætte en række, der bryder en begrænsning (inklusive en unik begrænsning). Hvis du ikke får den undtagelse, kan du få en anden generel Hibernate-undtagelse - det afhænger af versionen af ​​Hibernate og Hibernates evne til at kortlægge MySQL-undtagelsen til en Hibernate-undtagelse i den version og type database, du bruger ( Jeg har ikke testet det på alt).

Du får kun undtagelsen efter at have kaldt flush() , så du bør sikre dig, at dette også er i din try-catch-blok.

Jeg ville være forsigtig med at implementere løsninger, hvor du tjekker, at rækken eksisterer først. Hvis flere sessioner opdaterer tabellen samtidigt, kan du få en løbstilstand. To processer læser rækken næsten på samme tid for at se, om den eksisterer; de opdager begge, at den ikke er der, og så forsøger de begge at oprette en ny række. Man vil fejle afhængigt af, hvem der vinder løbet.

En bedre løsning er at forsøge at indsætte først, og hvis det mislykkes, antag, at det allerede var der. Men når først du har en undtagelse, bliver du nødt til at rulle tilbage, så det vil begrænse, hvordan du kan bruge denne tilgang.



  1. Kombination af mysql-forespørgsler, der genbruger flere selvtilslutninger

  2. Søg i en MySQL-kolonne med en JSON-streng for en bestemt værdi

  3. Sådan får du første række pr. gruppe i PostgreSQL

  4. SQL Server-pivottabel med flere kolonneaggregater