Prawdopodobnie musisz zmienić swój poziom izolacji.
Oto kilka informacji: http://www.interview-questions-tips-forum.net/index.php/Your-Questions-on-Java/JDBC-Transaction/Transaction-Isolation-Levels
Mówi o różnych poziomów izolacji, a co mogą pomóc straży przeciw. Ogólny sposób, aby to zrobić, to zacząć od ścisłego, a następnie zmniejszyć, jeśli potrzebujesz lepszych czasów odpowiedzi, pamiętając o wymogach integralności danych/fałszywych odczytów. Poziomy transakcyjne
edit
sprężynowe są wykorzystywane do abstrakcyjnego JDBC (lub cokolwiek) poziomów izolacji transakcji w menedżerze transakcji. Są one zdefiniowane w klasie TransactionDefinition i są statycznymi elementami.
TransactionDefinition.ISOLATION_DEFAULT
Default isolation
TransactionDefinition.ISOLATION_READ_UNCOMMITTED
Lowest level of isolation; allows transactions to see uncommitted modifications from other transactions
TransactionDefinition.ISOLATION_READ_COMITTED
Cannot read uncommitted data
TransactionDefinition.ISOLATION_REPEATABLE_READ
Ensures repeatable reads
TransactionDefinition.ISOLATION_SERIALIZABLE
Most reliable; all transactions are executed atomically, and are treated as though they occurred serially.
Dostępne są również poziomy propagacji transakcji. Możesz używać transakcji dla czystych odczytów, co może być przesadą - odczyty nie wymagają transakcji, wpisy powinny ZAWSZE zawierać transakcję wokół nich. Poziom propagacji jest również określony w definicji TransactionDefinition. Są one używane, zwykle w pliku okablowania sprężyn, do definiowania serializacji i propagacji dla określonego połączenia. Jeśli masz przykład swojego okablowania, być może będę mógł podać więcej wskazówek/informacji.
Nie jestem pewien moich granic transakcji. Mam @transactional na moich metodach DAO, które wymagają transakcji, ale mam również @transactional na moim punkcie wejścia do kodu przy użyciu DAO. Jeśli usunę pierwszy, spowoduje to błąd braku transakcji. To jest coś, co obecnie badam. Sprawdź http://stackoverflow.com/questions/807457/ –
Mój @Transactional był zbyt daleko, po usunięciu go proces działa dobrze bez blokowania bazy danych. Nadal mam pewne dziwne problemy @Transactional, ale dla tego procesu rozwiązałem go po prostu polegając na mniejszych transakcjach. To pytanie również było pomocne http://stackoverflow.com/questions/1079114. –