Подтвердить что ты не робот

Реализации JPA - Какой из них лучше всего использовать?

Я использовал следующие реализации JPA:

  • Hibernate,
  • Toplink,
  • OpenJPA

У каждого из них свои сильные и слабые стороны. Я нашел Hibernate самым продвинутым из трех, за исключением того, что он смешал некоторые свои усовершенствования с JPA, что затруднило переход к другим провайдерам. Самое главное, что его интерпретатор запросов был гораздо более мягким при интерпретации JPA. Они немного затрудняют получение правильных библиотек для поддержки спящего режима, потому что я нашел в нем миссию, пытающуюся получить правильные версии всех зависимостей.

Топлинк был в порядке, но оставалось ощущение, что оно слегка искалечено, поскольку кажется, что Oracle хочет, чтобы вы использовали/покупали? их более продвинутой библиотекой. Попытка загрузить его также была миссией, потому что вам нужно установить ее, запустив файл jar. Я обнаружил, что он реализовал только базовую спецификацию JPA. Причина, по которой я использовал его, - это спящий режим, который использует множество библиотек, которые обычно используются в других проектах с открытым исходным кодом, которые часто могут возникать при проблемах классоардера, особенно при использовании JBoss

OpenJPA - это, безусловно, самая лучшая документация, и ее легко загружать и использовать, но она кажется очень плохой. Возможно, его только мой код, но код, который я нашел более продвинутым, например отношения OneToMany с CascadeType.all, просто не работают. По общему признанию, это может быть мой код, который был неправильным, и у меня не было времени проверить чистый случай, но многие инциденты, подобные этому, оставляют меня страшно использовать. Я действительно надеюсь, что все станет лучше. Его сообщения об ошибках часто бесполезны для решения проблемы.

Какие другие библиотеки используют люди, а какие они предпочитают и почему?

4b9b3361

Ответ 1

У меня были те же выводы об этих реализациях.

  • OpenJPA был/казался неудачным

  • У спящего режима было множество библиотек, и, похоже, у них были проблемы с не ленивой загрузкой всего.

  • Топлинк оказался моим выбором. Это было не так гибко, как Hibernate, но он работает, и мне не нужно устанавливать commons-logging.

Я бы попробовал следующее: JPOX, который недавно был переименован в datanucleus.

Ответ 2

Лично я не чувствую, что OpenJPA еще достаточно зрелая. Существуют и другие библиотеки с открытым исходным кодом, которые более зрелые, и я бы предпочел использовать их. Это те, которые я бы рассмотрел в порядке:

  • Спящий режим. Hibernate существует уже давно, и он действительно проложил путь для ORM на Java. Единственная проблема с Hibernate - это лицензирование. Это лицензия LGPL, которая может заставить некоторых коммерческих компаний извиваться (по причинам, которые я не буду здесь делать). Во всяком случае, если LGPL - проблема для вас, возможно, хорошо справиться с этим.

  • EclipseLink. Некоторые предпосылки на eclipselink. Toplink Essentials была бесплатной версией Oracle для реализации JPA. EclipseLink был взят из Toplink, полностью исполняемой JPA-реализации Oracle. EclipseLink станет поставщиком JPA 2.0 для Glassfish v3.0, поэтому похоже, что все отходит от Toplink Essentials и EclipseLink. Хотя версия EclipseLink только 1.0.2, продукт долгое время находился под другими именами.

Проект, над которым я сейчас работаю, находится в Toplink Essentials прямо сейчас, но мы планируем скоро перейти на Eclipselink. Hibernate отсутствовал в вопросах лицензирования, о которых я упоминал ранее.

Ответ 3

OpenJPA известен как Kodo, и это то, что BEA купила довольно давно. Кодо - это реализация JDO и JPA. Кроме того, мы используем OpenJPA довольно интенсивно. Таким образом, я не говорю, что он не созрел. Это прекрасно. Однако я бы предложил использовать Hibernate, а именно JPA-обертки вокруг Hibernate.

Причина? 1) JPA очень, очень похож на Hibernate 2) Многие рабочие места имеют требования к гибернату. Лучше опираться на основные продукты... в основном