Как настроить Eclipselink с JPA?

В документации Eclipselink говорится, что мне нужны следующие записи в моем pom.xml, чтобы получить его с помощью Maven:

<dependencies>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.0.0</version>
    <scope>compile</scope>
       ...
  </dependency>
<dependencies>
      ...
<repositories>
  <repository>
     <id>EclipseLink Repo</id>
     <url>http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo</url>
  </repository>    
      ...
</repositories> 

Но когда я пытаюсь использовать аннотацию @Entity, NetBeans сообщает мне, что класс не найден. И действительно: в пакете javax.persistence от Eclipselink нет класса Entity.

Как мне настроить Eclipselink с Maven?


person deamon    schedule 09.06.2010    source источник


Ответы (4)


Артефакт eclipselink не предоставляет API JPA 2.0, вам нужно добавить javax.persistence:

<repositories>
  <repository>
    <id>eclipselink</id>
    <url>http://www.eclipse.org/downloads/download.php?r=1&amp;nf=1&amp;file=/rt/eclipselink/maven.repo/</url>
  </repository>
</repositories>
<dependencies>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope><!-- since I'm running inside a Java EE container -->
  </dependency>
  <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope><!-- since I'm running inside a Java EE container -->
  </dependency>
  ...

I recommend to use the non OSGI EclipseLink jar for the sake of simplicity.

person Pascal Thivent    schedule 09.06.2010
comment
Я уже пытался добавить зависимость javax.persistence, но в NetBeans возникает ошибка, сообщающая мне, что класса Entity нет. Если я конвертирую тот же класс в Java, все в порядке. Ваш пост привел меня в нужное место. - person deamon; 10.06.2010

Просто добавьте следующее в свой pom.xml.

Теперь эти артефакты находятся в репозиториях maven, так что не нужно добавлять никаких <repository>

 <!-- JPA  -->
 <dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>eclipselink</artifactId>
    <version>2.5.1</version>
</dependency>
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
</dependency>



Или, если вы используете сервер приложений Java EE, используйте org.eclipse.persistence.jpa:org.eclipse.persistence, так как он не включает зависимости, которые уже есть на сервере.

 <!-- JPA for Java EE application servers  -->
 <dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>org.eclipse.persistence.jpa</artifactId>
  <version>2.5.1</version>
  <scope>provided</scope>
</dependency>
<dependency>
  <groupId>org.eclipse.persistence</groupId>
  <artifactId>javax.persistence</artifactId>
  <version>2.0.0</version>
  <scope>provided</scope>
</dependency>
person user454322    schedule 07.11.2013
comment
У вас есть ссылка? - person Mr_and_Mrs_D; 25.06.2014
comment
Для справки: search.maven .org/artifact/org.eclipse.persistence/ - person nvidot; 20.01.2021

Когда я просматриваю свой локальный репозиторий maven, org.eclipse.persistence:eclipselink действительно содержит API сохранения, по крайней мере, для версии 2.0.0-SNAPSHOT eclipselink.

Но в репозитории eclipselink есть еще один набор зависимостей, немного более модульный. Это зависимости, которые я использую в текущем проекте:

<!-- persistence api -->
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>javax.persistence</artifactId>
    <version>2.0.0</version>
    <scope>provided</scope>
</dependency>
<!-- jpa implementation -->
<dependency>
    <groupId>org.eclipse.persistence</groupId>
    <artifactId>org.eclipse.persistence.jpa</artifactId>
    <version>2.0.2</version>
    <scope>provided</scope>
</dependency>

Обратите внимание, что область действия задана, поскольку я выполняю развертывание на Glassfish, который уже содержит eclipselink.

person Jörn Horstmann    schedule 09.06.2010

Вы можете попробовать добавить

<dependency>
   <groupId>org.eclipse.persistence</groupId>
   <artifactId>javax.persistence</artifactId>
   <version>2.0.0</version>
   <scope>compile</scope>
</dependency>
person Mykola Golubyev    schedule 09.06.2010