Есть только два JPA-провайдера, которых я хотел бы использовать:
Если вы хотите придерживаться стандартного JPA, я бы использовал EclipseLink. Принимая во внимание, что Toplink Essentials является эталонной реализацией JPA 1.0, EclipseLink в основном унаследовал код TopLink Essentials и будет эталонной реализацией JPA 2.0 (и поставляется вместе с Glassfish V3, когда она выйдет; ожидается около JavaOne в мае 2009 г.) TopLink Essentials был несколько урезанной версией коммерческого продукта Oracle TopLink, но EclipseLink в основном имеет все функции, которые есть у TopLink.
Другой выбор, очевидно, Hibernate. Это широко используется и зрелый, но это не проблема, свободная от того, что я видел. Например, в последний раз, когда я смотрел, у Hibernate были проблемы с сущностью, имеющей множественные нетерпеливые отношения «один ко многим». Я не знаю, есть ли у Hibernate эквивалент подсказки EclipseLink для пакетных запросов, но это невероятно полезная функция для решения подобных проблем.
Hibernate, конечно, также поддерживает стандарт JPA. Самое большое преимущество Hibernate в том, что если у вас есть вопрос о том, как он работает, поиск в Google, скорее всего, найдет вам ответ.
Честно говоря, я бы не стал рассматривать ничего, кроме двух вышеуказанных провайдеров.