Можно ли взять его из проекта Glassfish (glassfish-persistence-api) или, может быть, есть банка Hibernate?
Какую банку я должен включить, чтобы использовать пакет javax.persistence в приложении на основе гибернации?
Ответы (7)
Если вы разрабатываете систему OSGi, я бы порекомендовал вам загрузить «комплектную» версию из репозитория пакетов Springsource Enterprise< /а>.
В противном случае можно использовать обычный jar-файл, содержащий пакет javax.persistence.
Если вы используете maven, добавление зависимости ниже должно работать
<dependency>
<groupId>javax.persistence</groupId>
<artifactId>persistence-api</artifactId>
<version>1.0</version>
</dependency>
Вы можете использовать файл ejb3-persistence.jar, входящий в состав гибернации. Этот jar включает только пакет javax.persistence.
В последнем и лучшем Hibernate мне удалось устранить зависимость, включив файл hibernate-jpa-2.0-api-1.0.0.Final.jar в каталог lib/jpa. Я не нашел банку ejb-persistence в самой последней загрузке.
hibernate.jar и hibernate-entitymanager.jar содержат только пакеты org.hibernate.*. Так что вы должны взять его из проекта Glassfish.
Для JPA 2.1 пакет javax.persistence можно найти здесь:
<dependency>
<groupId>org.hibernate.javax.persistence</groupId>
<artifactId>hibernate-jpa-2.1-api</artifactId>
<version>1.0.0.Final</version>
</dependency>
См.: hibernate-jpa-2.1-api на Maven Central Похоже, шаблон меняет имя артефакта по мере изменения версии JPA. Если это продолжится, можно ожидать появления новых версий в Maven Central здесь: Версии JPA в спящем режиме
Вышеупомянутый API JPA 2.1 можно использовать в сочетании с Hibernate 4.3.7, а именно:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.3.7.Final</version>
</dependency>
В целом, я согласен с приведенными выше ответами, которые рекомендуют добавить зависимость от maven, но я предпочитаю следующее решение.
Добавьте зависимость с классами API для полного профиля JavaEE:
<properties>
<javaee-api.version>7.0</javaee-api.version>
<hibernate-entitymanager.version>5.1.3.Final</hibernate-entitymanager.version>
</properties>
<depencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-api</artifactId>
<version>${javaee-api.version}</version>
<scope>provided</scope>
</dependency>
</dependencies>
Также добавьте зависимость от конкретного провайдера JPA, например, предложенного antonycc:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>${hibernate-entitymanager.version}</version>
</dependency>
Примечание <scope>provided</scope> в разделе зависимостей API: это означает, что соответствующий jar не будет экспортироваться в lib/ артефакта, а будет предоставлен сервером приложений. Убедитесь, что ваш сервер приложений реализует указанную версию API JavaEE.