Я фактически прошел через источник Hibernate (4.3.0-SNAPSHOT) и источник EclipseLink (2.5.0-SNAPSHOT) и просмотрел реализацию JPA в каждом.
EclipseLink явно не безопасен для потоков, как вы описываете. В частности, он пытается пересчитать объединения несколько раз.
Реализация Hibernate выглядит для меня поточно-ориентированной. Я не уверен на 100%, но, похоже, так и есть. Я бы сказал, что в будущем это не гарантируется, поскольку это не указано.
Тем не менее, я предупрежу вас, я не думаю, что вы получите много. Исходя из того, что я смотрю, большая часть компиляции запроса фактически выполняется во время фазы «createQuery», поэтому вы даже не получите большого кеширования результатов.