2014-02-03 2 views
8

Я использую Spring 3 и Hibernate 4 JPA. Я смущен относительно javax.persistence JAR. Я нашел ниже две зависимости Maven от Google. Скажите, пожалуйста, какой из них требуется ниже двух зависимостей?Зависимости Maven от javax.persistence JAR?

 <dependency> 
      <groupId>javax.persistence</groupId> 
      <artifactId>persistence-api</artifactId> 
      <version>1.0.2</version> 
     </dependency> 

     <dependency> 
      <groupId>org.eclipse.persistence</groupId> 
      <artifactId>javax.persistence</artifactId> 
      <version>2.0.0</version> 
     </dependency> 

ответ

11

Первый из этих javax.persistence.persistence-api - это API Jar, который определяет интерфейсы, нейтральные поставщикам, с которыми должно работать ваше приложение.

Во-вторых, это реализация EclipseLink этого API.

Можно удалить ссылки на первую зависимость javax.persistence и просто использовать банку EclipseLink. Однако есть веская причина не делать этого.

Написание и компиляция кода в отношении нейтрального поставщика javax.persistence API гарантирует, что ваш код приложения переносится для разных поставщиков персистентности. Например, если вы хотите переключиться на Hibernate, вы можете поместить это в свой pom.xml и удалить зависимость org.eclipse, не изменяя какой-либо код вашего приложения.

Однако, есть небольшая деталь, которую вы должны изменить. Чтобы ваше приложение могло переключаться между поставщиками персистентности, зависимость «реализация» должна использоваться только во время выполнения. В противном случае код, зависящий от поставщика, может легко проникнуть в вашу кодовую базу. Добавьте в свою зависимость org.eclipse и посмотрите, компилируется ли ваше приложение.

<scope>runtime</scope> 

В результате этого вы можете обнаружить, что ваше приложение имеет в нем специальный код EclipseLink. Это означает, что вы не можете изменить поставщика постоянства, не изменяя свою кодовую базу.

Независимо от того, является ли это проблемой для вас. ;)

+0

Стив, я попробовал использовать javax.persistence jar. Но я продолжаю получать некоторые ошибки при запуске приложения, говоря, что «NoSuchMethodError» – user755806

+1

Как я уже сказал в своем ответе, вы не можете использовать 'javax.persistence' самостоятельно, потому что он не обеспечивает реализацию. Либо используйте 'org.eclipse' самостоятельно, либо используйте оба параметра с' org.eclipse', определенные как «runtime». – Steve

+0

Стив, Спасибо за ваш ответ. Что означает область выполнения? Кроме того, ejb3.persistence jar также реализует API Java-совместимости? – user755806

1
<dependency> 
    <groupId>org.eclipse.persistence</groupId> 
    <artifactId>javax.persistence</artifactId> 
    <version>2.0.0</version> 
</dependency> 

Какой Lastest один и компактный с Hibernate 4. Также последняя версия поддержки спящего режима JPA 2.1.0, пожалуйста, проверьте этот link

+0

Sureshkumar благодарит за ваш ответ. Если у нас есть этот баночник, то jj.3.Функция безопасности не требуется правильно? потому что он поставляется вместе с hibernate4 банком менеджера объектов. – user755806

+0

есть. ты прав. –

0

Вам не нужно включать эту зависимость в явном виде, то в Hibernate pom и будет добавлен транзитно

+0

Evgeniy, я использую версию hibernate 4.0.2. Но я не вижу стойкости в своем помпе. – user755806

+0

Вам нужно использовать hibernate-entitymanager – Gimby

+0

Да. Я использую только hibernate-entitymanager – user755806

Смежные вопросы