Dette er en klar deadlock situation. Dette er mere relateret til en MySQL-fejl end et Hibernate-problem med dine klasser. Lad os først gennemgå definitionen af en deadlock :
Se denne side for mere information:http://en.wikipedia.org/wiki/Deadlock
Hvordan håndterer du denne situation. Nå, du skal læse følgende artikel:Deadlocks in InnoDB . Den indeholder de fleste af de oplysninger, du har brug for. Denne artikel forklarer i detaljer, hvordan man sporer og håndterer dødvande, det er et must at læse.
Grundlæggende skal du udføre følgende trin baseret på oplysningerne ovenfor:
- Opret en MySQL-sporing:Spor alle de forespørgsler, der køres på MySQL-serveren.
- Få deadlock-sporingsoplysningerne
- Sæt dead lock-sporingen og MySQL-sporingen med hinanden for at bestemme årsagen til dead lock.
Artiklen om InnoDB's har også en liste over løsninger, så jeg vil ikke gentage dem her. Bare husk på deadlocks er ikke en fatal fejl, du skal bare håndtere den. Så måske fange undtagelsen og prøve transaktionen igen. Sørg også for, at dine forespørgsler, der genereres af Hibernate, er optimale i den forstand, at de bruger indekser hvor de kan osv. En anden ting du kan prøve er batching transaktionen på Hibernate og udføres i batch .
Jeg er sikker på, at du med de to ovenstående links vil være i stand til at håndtere problemet, og det vil være værdifuld erfaring for dig selv at arbejde igennem dette. Hvis du finder et bestemt emne, du har problemer med, føj det til spørgsmålet, og lad os tage os af det.