This week's book giveaway is in the Mac OS forum. We're giving away four copies of a choice of "Take Control of Upgrading to Yosemite" or "Take Control of Automating Your Mac" and have Joe Kissell on-line! See this thread for details.
The first step is always to get a profiler and figure out where exactly your code is spending its time. There is no point doing anything until you figure that out.
IF the first employee runs fast and things slow down the more you process, you probably have an inefficient algorithm. i.e. something that runs in O(n^2) time. However, without analyzing the actual code, that is only a guess.
There are only two hard things in computer science: cache invalidation, naming things, and off-by-one errors
Since you're using Hibernate, it could be a Session filling up, as it usually exhibits that kind of symptom. You'd then need to flush() and clear() the session regularly.
But as others have answered, you should be profiling to make sure it's the problem: doing a simple thread dump while the processing drags on might be enough to see in which part of the code it's taking time. Obviously, since you have a performance problem, what you think should work is not what actually works.