We had also the problem when we insert a new entity. What I don't understand then is how come that when the message is delivered you "see" the row not yet committed in database.
1) new row is inserted (new entity created + flush)
2) async msg MDB fires and receives the message
3) because message delivery happens in a concurrent transaction, the changes of the original transaction are not visible, and entity can not be loaded
4) insert is comitted and becomes visible to the other transactions.
Are you using some kind of second-level cache?
[Message sent by forum member 'ewernli' (ewernli)]
http://forums.java.net/jive/thread.jspa?messageID=352530