Первый из этих 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. Это означает, что вы не можете изменить поставщика постоянства, не изменяя свою кодовую базу.
Независимо от того, является ли это проблемой для вас. ;)
Стив, я попробовал использовать javax.persistence jar. Но я продолжаю получать некоторые ошибки при запуске приложения, говоря, что «NoSuchMethodError» – user755806
Как я уже сказал в своем ответе, вы не можете использовать 'javax.persistence' самостоятельно, потому что он не обеспечивает реализацию. Либо используйте 'org.eclipse' самостоятельно, либо используйте оба параметра с' org.eclipse', определенные как «runtime». – Steve
Стив, Спасибо за ваш ответ. Что означает область выполнения? Кроме того, ejb3.persistence jar также реализует API Java-совместимости? – user755806