Vous devez probablement modifier votre niveau d'isolation.
Voici quelques informations: http://www.interview-questions-tips-forum.net/index.php/Your-Questions-on-Java/JDBC-Transaction/Transaction-Isolation-Levels
Il parle sur les différents niveaux d'isolement, et ce qu'ils peuvent aider à se prémunir contre. La manière générale de faire ceci est de commencer avec le strict, puis d'aller plus bas si vous avez besoin de meilleurs temps de réponse, tout en gardant à l'esprit les exigences d'intégrité des données/fausses lectures.
modifier
niveaux de transaction de printemps sont utilisés pour JDBC abstrait (ou autre) les niveaux d'isolation des transactions au gestionnaire de transactions. Ils sont définis dans la classe TransactionDefinition et sont des membres statiques.
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.
Il existe également des niveaux de propagation de transaction. Il se peut que vous utilisiez une transaction pour des lectures pures, ce qui pourrait être excessif - les lectures ne nécessitent pas de transactions, les écritures doivent TOUJOURS avoir une transaction autour d'elles. Les niveaux de propagation sont également définis dans TransactionDefinition. Ceux-ci sont utilisés, généralement dans un fichier de câblage à ressort, pour définir la sérialisation et la propagation pour un appel particulier. Si vous avez un exemple de votre câblage, je pourrais être en mesure de donner quelques conseils/informations supplémentaires.
Je ne suis pas sûr de mes limites de transaction. J'ai @transactional sur mes méthodes DAO qui ont besoin d'une transaction, mais j'ai aussi @transactional sur mon point d'entrée au code en utilisant le DAO. Si je supprime l'ancien, il me donne une erreur sans transaction. C'est quelque chose que j'étudie actuellement. Check out http://stackoverflow.com/questions/807457/ –
Mon @Transactional était trop loin, une fois que je l'ai retiré, le processus fonctionne correctement sans verrouiller la base de données. J'ai encore quelques problèmes étranges @Transactional, mais pour ce processus, je l'ai résolu juste en comptant sur de plus petites transactions. Cette question a été utile aussi http://stackoverflow.com/questions/1079114 –