Поставщик сущностей для EntityManager не указан

У меня есть мой persistence.xml с тем же именем, используя toplink, в каталоге META-INF. Тогда у меня есть код, вызывающий его с помощью...

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");

Тем не менее, я получил следующее сообщение об ошибке

2009-07-21 09:22:41,018 [main] ERROR - No Persistence provider for EntityManager named agisdb
javax.persistence.PersistenceException: No Persistence provider for EntityManager named agisdb
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:89)
    at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:60)

Вот persistence.xml...

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
    <persistence-unit name="agisdb">
        <class>com.agis.livedb.domain.AddressEntity</class>
        <class>com.agis.livedb.domain.TrafficCameraEntity</class>
        <class>com.agis.livedb.domain.TrafficPhotoEntity</class>
        <class>com.agis.livedb.domain.TrafficReportEntity</class>
        <properties>
            <property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
            <property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
            <property name="toplink.jdbc.user" value="root"/>
            <property name="toplink.jdbc.password" value="password"/>
        </properties>
    </persistence-unit>
</persistence>

Это должно было быть в classpath... Тем не менее, я получил вышеуказанную ошибку... Очень ценю любую помощь... Благодаря

4b9b3361

После <persistence-unit name="agisdb"> определите имя поставщика сохранения:

<provider>org.hibernate.ejb.HibernatePersistence</provider>
71
ответ дан 17 авг. '09 в 0:55
источник

Поместите "hibernate-entitymanager.jar" в путь к классам приложения.
Для более новых версий вы должны использовать "hibernate-core.jar" вместо устаревшего hibernate-entitymanager

Если вы используете некоторую среду IDE, например Eclipse: Project Properties -> Java Build Path -> Libraries.

В противном случае поместите его в /lib вашего приложения.

77
ответ дан 25 февр. '11 в 21:36
источник

Убедитесь, что файл persistence.xml находится в каталоге: <webroot>/WEB-INF/classes/META-INF

58
ответ дан 06 дек. '09 в 23:29
источник

Мне это нужно в моем файле pom.xml:

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-entitymanager</artifactId>
    <version>4.2.6.Final</version>
</dependency>
14
ответ дан 20 окт. '13 в 5:55
источник

Возможно, вы определили одного поставщика, например <provider>org.hibernate.ejb.HibernatePersistence</provider>, но ссылаетесь на другой в банке. Это произошло со мной: мой поставщик persistence.xml был openjpa, но я использовал eclipselink в своем пути к классам. Надеюсь эта помощь!

8
ответ дан 13 мая '10 в 23:33
источник

Есть еще одна точка. Если вы столкнулись с этой проблемой в среде RCP Eclipse, вам может потребоваться изменить генерацию Factory с Persistence.createEntityManagerFactory на new PersistenceProvider().createEntityManagerFactory

см. ECF для подробного обсуждения этого вопроса.

7
ответ дан 24 авг. '11 в 15:16
источник

Быстрый совет:

  • проверьте, существует ли persistence.xml в вашем пути к классам
  • проверьте, находится ли поставщик hibernate в вашем пути к классам

При использовании JPA в автономном приложении (за пределами JavaEE) поставщик сохранения необходимо где-то указать. Это можно сделать двумя способами, о которых я знаю:

  • либо добавить элемент поставщика в блок персистентности: <provider>org.hibernate.ejb.HibernatePersistence</provider> (как описано в правильном ответе Крисом: qaru.site/info/49958/...)
  • или поставщик для интерфейса javax.persistence.spi.PersistenceProvider должен быть указан как служба, см. здесь: http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (это обычно включается, когда вы включаете спящий режим или другую реализацию JPA в свой путь к классам

В моем случае я узнал, что из-за неправильной конфигурации maven, hibernate-entitymanager jar не включался в зависимость, даже если это была временная зависимость другого модуля.

5
ответ дан 06 марта '14 в 13:15
источник

Столкнулся с той же проблемой и долгое время не мог найти решение. В моем случае это помогло заменить

<provider>org.hibernate.ejb.HibernatePersistence</provider>

с

<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>

Взял решение из здесь

4
ответ дан 13 апр. '17 в 18:40
источник

Если вы используете Eclipse, убедитесь, что шаблон исключения не удаляет ваш persistence.xml из исходных папок на пути сборки.

  • Перейдите на вкладку Свойства → Путь сборки Java → Источник.
  • Проверьте свой шаблон исключения, который находится в
    MyProject/src/main/java -> Excluded: <your_pattern>
    tree node
  • При необходимости установите Excluded: (None), выбрав node и нажав кнопку Изменить... слева.
4
ответ дан 06 сент. '13 в 18:05
источник

Угловой регистр: если вы используете m2Eclipse, он автоматически помещается в ваши папки ресурсов. Затем, когда вы пытаетесь запустить тесты внутри eclipse, последующее отсутствие persistence.xml приведет к этой ошибке.

3
ответ дан 25 июня '10 в 20:26
источник

Убедитесь, что вы создали файл persistence.xml в папке 'src'. Я создал в папке проекта, и это была моя проблема.

3
ответ дан 27 нояб. '11 в 6:59
источник

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

  • откройте связанный файл в вашем редакторе (если ваш проект закрыт в вашей среде IDE)
  • удалить все связанные с персистентностью и связанным с ним файлы.
  • сохранить файл
  • откройте проект в своей среде IDE
  • теперь привяжите db или таблицу по вашему выбору.
2
ответ дан 23 авг. '10 в 17:32
источник

Я столкнулся с той же проблемой, но на EclipseLink версии 2.5.0.

Я решил свою проблему, добавив еще один файл jar, который был обязательно (javax.persistence_2.1.0.v201304241213.jar.jar);

Необходимые банки:
   - javax.persistence_2.1.0.v201304241213.jar
   - eclipselink.jar
   - jdbc.jar(в зависимости от используемой базы данных).

Надеюсь, это поможет.

2
ответ дан 13 апр. '14 в 14:31
источник

У меня также была эта ошибка, но проблема заключалась в uri пространства имен в persistence.xml.

Я заменил http://xmlns.jcp.org/xml/ns/persistence на http://java.sun.com/xml/ns/persistence и версию с 2.1 по 2.0.

Теперь он работает.

2
ответ дан 25 апр. '14 в 11:30
источник

Вам нужно добавить hibernate-entitymanager-x.jar в путь к классам.

В Hibernate 4.x, если jar присутствует, то нет необходимости добавлять файл org.hibernate.ejb.HibernatePersistence в файле persistence.xml.

2
ответ дан 25 мая '14 в 22:36
источник

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

property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead.

Даже если я изменил persistence.xml, чтобы включить новое имя свойства:

<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>

После сообщения об имени устаревшего свойства я получил такое же PersistenceException, как и выше, и целую строку исключений. Мой совет: обязательно проверьте начало колбасы.

Кажется, что в Glassfish v2.1.1 есть ошибка, в которой перераспределение или развертывание и развертывание не обновляют файл persistence.xml, который где-то кэшируется. Мне пришлось перезапустить сервер, а затем он работал.

1
ответ дан 12 мая '11 в 12:25
источник

Вам нужно следующие файлы jar в пути к классам:

  • antlr-2.7.6.jar
  • Обще-коллекция-3.1.jar
  • dom4j-1.6.1.jar
  • hibernate-commons-annotations-4.0.1.Final.jar
  • hibernate-core-4.0.1.Final.jar
  • hibernate-entitymanager.jar
  • hibernate-jpa-2.0-api-1.0.0.Final.jar
  • javassist-3.9.0.jar
  • jboss-logging-3.1.1.GA.jar
  • jta-1.1.jar
  • slf4j-api-1.5.8.jar
  • ххх-JDBC-driver.jar
1
ответ дан 29 июня '13 в 15:30
источник

В OSGi-контексте необходимо перечислить единицы персистентности в пакете MANIFEST.MF, например

JPA-PersistenceUnits: my-persistence-unit

В противном случае пакет JPA не будет знать, что ваш пакет содержит единицы сохранения.

См. http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE.

1
ответ дан 18 окт. '12 в 12:34
источник

Если вы используете Maven, возможно, он не ищет подходящее место для папки META-INF. Другие упоминали о копировании папки, но другой способ, который работал у меня, заключался в том, чтобы сказать Maven, где искать его, используя тег <resources>. См.: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

1
ответ дан 15 дек. '16 в 11:32
источник

Hibernate 5.2.5
Файлы Jar, необходимые в пути к классу. Это находится в требуемой папке Hibernate 5.2.5 Final release. Его можно загрузить из http://hibernate.org/orm/downloads/

  • antlr-2.7.7
  • cdi-api-1.1
  • одноклассник-1.3.0
  • dom4j-1.6.1
  • эль-апи-2,2
  • Джеронимо-jta_1.1_spec-1.1.1
  • hibernate-commons-annotation-5.0.1.Final
  • hibernate-core-5.2.5.Final
  • hibernate-jpa-2.1-api-1.0.0.Final
  • jandex-2.0.3.Final
  • Javassist-3.20.0-GA
  • javax.inject-1
  • JBoss-перехватчик-api_1.1_spec-1.0.0.Beta1
  • jboss-logging-3.3.0.Final
  • jsr250-апи-1.0

Создайте xml файл "persistence.xml" в

YourProject/SRC/META-INF/persistence.xml

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>

<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
         http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
         version="2.1">

<persistence-unit name="sample">

    <class>org.pramod.data.object.UserDetail</class>
    <exclude-unlisted-classes>true</exclude-unlisted-classes>
    <properties>
        <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
        <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
        <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/>
        <property name="hibernate.connection.username" value="root"/>
        <property name="hibernate.connection.password" value="root"/>
        <property name="hibernate.hbm2ddl.auto" value="create-drop"/>
        <property name="hibernate.show_sql" value="true"/>
        <property name="hibernate.format_sql" value="false"/>

        <property name="hibernate.cache.use_second_level_cache" value="false"/>

        <property name="hibernate.archive.autodetection" value="true"/>
    </properties>
</persistence-unit>

  • обратите внимание на информацию, указанную в <persistance> и версия должны быть 2.1.
  • обратите внимание на имя < persistance-unit > , имя упоминается как "образец" . Это имя должно использоваться точно так же, когда вы загружаете

EntityManagerFactor = Persistance.createEntityManagerFactory( "sample" );. "sample" может быть изменен в соответствии с вашим соглашением об именах.

Теперь создайте класс Entity. с именем в моем примере UserDetail, в пакете org.pramod.data.object

UserDetail.java

package org.pramod.data.object;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;

@Entity
@Table(name = "user_detail")
public class UserDetail {
    @Id
    @Column(name="user_id")
    private int id;
    @Column(name="user_name")
    private String userName;

    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getUserName() {
        return userName;
    }
    public void setUserName(String userName) {
        this.userName = userName;
    }   
    @Override
    public String toString() {
       return "UserDetail [id=" + id + ", userName=" + userName + "]";
    }
}

Теперь создайте класс с основным методом.

HibernateTest.java

package org.pramod.hibernate;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.pramod.data.object.UserDetail;

public class HibernateTest {
    private static EntityManagerFactory entityManagerFactory;

    public static void main(String[] args)  {
        UserDetail user = new UserDetail();
        user.setId(1);
        user.setUserName("Pramod Sharma");

        try {
            entityManagerFactory = Persistence.createEntityManagerFactory("sample");
            EntityManager entityManager = entityManagerFactory.createEntityManager();
            entityManager.getTransaction().begin();
            entityManager.persist( user );
            entityManager.getTransaction().commit();
            System.out.println("successfull");
            entityManager.close();
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

}

Выход будет

UserDetail [id=1, userName=Pramod Sharma]
Hibernate: drop table if exists user_details
Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id))
Hibernate: insert into user_details (user_name, user_id) values (?, ?)
successfull
0
ответ дан 06 дек. '16 в 14:53
источник

Если в Persistence.createEntityManagerFactory("JPAService") есть разные имена в разных классах, чем вы получаете ошибку. Рефакторинг можно получить разными именами, которые были в моем случае. В одном классе автогенератор Persistence.createEntityManagerFactory("JPAService") в private void initComponents(), класс ContactTable отличался от Persistence.createEntityManagerFactory("JPAServiceExtended") в классе DBManager.

0
ответ дан 02 окт. '14 в 13:25
источник