It seems to be an identitymap problem in TopLink.
You can try locating the lock (isn't a real db lock) performing the command:
asadmin generate-jvm-report --type=thread
If you find blocked threads referencing TopLink's "oracle.toplink.internal.identitymaps." probably that's your case.
It already happened to me and, in my case, the solution was disabling shared cache. Doing so, if you have more than one session trying to refresh the same entity objects, they will not block, waiting until the other session finishes his work...
You can add the following property in your persistence.xml:
...
<properties>
<property name="toplink.cache.shared.default" value="false"/>
</properties>
...
[Message sent by forum member 'fsanti68' (fsanti68)]
http://forums.java.net/jive/thread.jspa?messageID=359882