Detta är ett definitivt stoppläge situation. Detta är mer relaterat till ett MySQL-fel än ett Hibernate-problem med dina klasser. Låt oss först se över definitionen av deadlock :
Se den här sidan för mer information:http://en.wikipedia.org/wiki/Deadlock
Hur hanterar du denna situation. Tja, du måste läsa följande artikel:Deadlocks in InnoDB . Den innehåller det mesta av den information du behöver. Den här artikeln förklarar i detalj hur man spårar och hanterar dödlägen. Det är ett måste att läsa.
I huvudsak måste du göra följande steg baserat på informationen ovan:
- Skapa en MySQL-spårning:Spåra alla frågor som körs på MySQL-servern.
- Hämta spårningsinformationen om dödläget
- Mata ihop spåret för dödlås och MySQL med varandra för att fastställa orsaken till dödlåset.
Artikeln om InnoDB's har också en lista över lösningar så jag tänker inte upprepa dem här. Tänk bara på dödlägen är inte ett fatalt fel, du behöver bara hantera det. Så kanske fånga undantaget och försöka transaktionen igen. Se också till att dina frågor som genereras av Hibernate är optimala i den meningen att de använder index var de kan etc. En annan sak du kan prova är batchning transaktionen i Hibernate och körs i batch .
Jag är säker på att med de två länkarna ovan kommer du att kunna hantera problemet och det kommer att vara värdefull erfarenhet för dig att arbeta igenom detta själv. Om du hittar något speciellt föremål som du har problem med, lägg till det i frågan och låt oss ta itu med det.