@Chris Cranford sorry for the late response. The error I've been experiencing was random and I solved it by changing the implementation. I can describe what was going on and how I've changed it though. Maybe this will help someone. The faulty logic: 1. Operate within a Transaction context (via Spring's @Transactional annotation) 2. Fetch the data (Collection) necessary for processing from the main thread 3. For each element in the above collection submit a new job to the thread pool 4. Each job would process the data item and produce new Entity instance (Spring's transactions are thread local so the TX from the main thread wasn't present in the job thread 5. Each job would fetch the produced Entities' dependencies (other related Entities) and assign them to it accordingly 6. Main thread would gather the Entities from all jobs and persist them after all jobs are finished Fix: At step 5, instead of fetching whole related Entities, I've fetched IDs/PKs only and used EntityManager::getReference to set up its dependencies From the other comments I can see that this issue happens only when dealing with multi threaded logic. It appears that some race condition happens when one tries to persist an entity that contains dependencies fetched in other threads. At least that is my conclusion - the fix worked and I didn't see the Exception ever since. |