Нет поставщика сохраняемости для EntityManager с именем
у меня есть упорство.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)
вот это упорство.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. Тем не менее, я получил вышеуказанную ошибку.
25 ответов:
после
<persistence-unit name="agisdb">, определите имя поставщика сохраняемости:<provider>org.hibernate.ejb.HibernatePersistence</provider>
поставить
"hibernate-entitymanager.jar"в classpath приложения.
Для более новых версий, вы должны использовать"hibernate-core.jar"вместо устаревшихhibernate-entitymanagerесли вы работаете через некоторые IDE, как затмение:
Project Properties -> Java Build Path -> Libraries.в противном случае поместите его в
/libприложения.
мне это было нужно в моем pom.xml-файл:
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.6.Final</version> </dependency>
столкнулся с той же проблемой и не мог найти решение в течение довольно долгого времени. В моем случае это помогло заменить
<provider>org.hibernate.ejb.HibernatePersistence</provider>С
С здесь<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
может быть, вы определили один поставщик, как
<provider>org.hibernate.ejb.HibernatePersistence</provider>но ссылаясь на другой в банке. Это случилось со мной: моя настойчивость.XML-провайдер был openjpa, но я использовал eclipselink в моем classpath. Надеюсь, это поможет!
есть еще один момент: если вы столкнулись с этой проблемой в среде Eclipse RCP, вам, возможно, придется изменить Заводское поколение с
Persistence.createEntityManagerFactoryдоnew PersistenceProvider().createEntityManagerFactoryпосмотреть ECF для детального обсуждения этого вопроса.
совет:
- проверьте, если настойчивость.xml находится в вашем classpath
- проверьте, находится ли поставщик hibernate в вашем classpath
при использовании JPA в автономном приложении (за пределами JavaEE), поставщик сохраняемости должен быть указан где-то. Это может быть сделано двумя способами, которые я знаю:
- либо добавить элемент provider в единицу сохранения:
<provider>org.hibernate.ejb.HibernatePersistence</provider>(как описано в правильном ответе Криса: https://stackoverflow.com/a/1285436/784594)- или провайдер для интерфейса javax.стойкость.спи.PersistenceProvider должен быть указан как сервис, см. здесь:http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (это обычно включается, когда вы включаете hibernate или другую реализацию JPA в свой classpath
в моем случае я узнал, что из-за неправильной конфигурации maven, hibernate-entitymanager jar был не включенный как зависимость, даже если это была временная зависимость другого модуля.
Если вы используете Eclipse, убедитесь, что картина исключения не удалить
persistence.xmlиз исходных папок по пути сборки.
- на Свойства - > Путь Сборки Java - > Источник tab
- Проверьте шаблон исключения, который находится в
MyProject/src/main/java -> Excluded: <your_pattern>
узел дерева- Дополнительно, установите его в
Excluded: (None)выбрав узел и нажав правка... кнопка слева.
угловой случай: если вы используете m2Eclipse, он автоматически помещает исключения в папки ресурсов. Затем, когда вы пытаетесь запустить тесты внутри eclipse, последующее отсутствие персистентности.xml приведет к этой ошибке.
убедитесь, что вы создали настойчивость.xml-файл в папке "src". Я создал в папке проекта и это была моя проблема.
это происходит, когда диспетчер сущностей пытается указать на многие единицы сохранения. Выполните следующие действия:
- откройте соответствующий файл в редакторе (при условии, что ваш проект был закрыт в IDE)
- удалить весь код, связанный с сохраняемостью и Entity manager
- сохраните файл
- откройте проект в IDE
- теперь свяжите БД или таблицу по вашему выбору
Я столкнулся с той же проблемой, но на EclipseLink версии 2.5.0.
Я решил свою проблему, добавив еще один файл jar, который был обязательно ( javax.persistence_2.1.0.v201304241213.сосуд.банку);
банок требуется:
- пакета javax.persistence_2.1.0.v201304241213.банку
- eclipselink.банку
- интерфейс JDBC.банку (в зависимости от используемой базы данных).Я надеюсь, что это помогает.
у меня тоже была такая ошибка, но проблема была URI пространства имен в
persistence.xml.Я заменил
http://xmlns.jcp.org/xml/ns/persistencetohttp://java.sun.com/xml/ns/persistenceи версии 2.1 до версии 2.0.Теперь это работает.
вам нужно добавить hibernate-entitymanager-x.jar в пути к классу.
В Hibernate 4.x, если jar присутствует, то нет необходимости добавлять организацию.зимовать.EJB-компонента.Гибернация в постоянстве.XML-файл.
на вопрос уже был дан ответ, но просто хотел опубликовать подсказку, которая меня поддерживала. Это исключение было вызвано после предыдущих ошибок. Я получал это:
property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead.хотя я изменил настойчивость.xml для включения нового имени свойства:
<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>после сообщения об устаревшем имени свойства я получал такое же исключение PersistenceException, как и выше, и целую другую строку исключений. Мой совет: обязательно проверьте начало исключения колбасы.
там, кажется, ошибка в Glassfish v2.1.1, где повторные развертывания или undeploys и развертывает не обновляют сохраняемость.xml, который где-то кэшируется. Мне пришлось перезапустить сервер, а затем он работал.
в контексте OSGi необходимо перечислить единицы сохранения в манифесте пакета.MF, например
JPA-PersistenceUnits: my-persistence-unitв противном случае JPA-bundle не будет знать, что ваш пакет содержит единицы сохранения.
см http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE .
вам нужны следующие файлы jar в classpath:
- antlr-2.7.6.банку
- commons-collections-3.1.банку
- dom4j-1.6.1.банку
- hibernate-commons-аннотации-4.0.1.Окончательный.банку
- hibernate-core-4.0.1.Окончательный.банку
- hibernate-entitymanager.банку
- hibernate-jpa-2.0-api-1.0.0.Окончательный.банку
- javassist-3.9.0.банку
- jboss-logging-3.1.1.GA.jar
- jta-1.1.банку
- slf4j-api-1.5.8.банку
- xxx-JDBC-драйвер.банку
спящий режим 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
- el-api-2.2
- Джеронимо-jta_1.1_spec-1.1.1
- hibernate-commons-аннотация-5.0.1.Финал
- hibernate-core-5.2.5.Финал
- hibernate-jpa-2.1-api-1.0.0.Финал
- jandex-2.0.3.Финал
- javassist-3.20.0-GA
- javax.инъекционные-1
- JBoss-interceptor-api_1.1_spec-1.0.0.Бета1
- от JBoss-лесозаготовки-3.3.0.Финал
- jsr250-api-1.0
создать xml-файл "настойчивость.XML-код" на
YourProject/src/META-INF / persistence.xml
настойчивость.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>
- пожалуйста, запишите информацию, указанную в теге , и версия должна быть 2.1.
- обратите внимание на имя тег, имя упоминается как "образец". Это имя должно использоваться точно так же при загрузке вашего
EntityManagerFactor = Persistance.createEntityManagerFactory("образец");. "образец" может быть изменен в соответствии с вашим именованием.
Теперь создайте класс сущности. с именем в соответствии с моим примером UserDetail, в пакете орг.Прамод.данные.объект
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 + "]"; } }Теперь создайте класс с метода main.
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
Если вы используете Maven, это может быть то, что он не ищет нужное место для папки META-INF. Другие упоминали копирование папки, но другой способ, который работал для меня, состоял в том, чтобы сказать Maven, где его искать, используя
<resources>тег. Смотрите: http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
Я на несколько лет опоздал на вечеринку здесь, но я попал в то же исключение, пытаясь получить Hibernate 3.5.1, работающий с HSQLDB и настольной программой JavaFX. Я получил его для работы с помощью этой темы и много проб и ошибок. Кажется, вы получаете эту ошибку для целого ряда проблем:
No Persistence provider for EntityManager named mickЯ попытался построить примеры учебника hibernate, но поскольку я использовал Java 10, я не смог заставить их легко создавать и запускать. Я сдалась, не желая тратить время на исправление своих проблем. Настройка модуля-инфо.java file (Jigsaw) - это еще один комок волос, который многие люди еще не обнаружили.
несколько запутанным является то, что эти (ниже) были только два файла, которые мне нужны в моей сборке.файл gradle. В документации Hibernate не ясно, какие именно банки вам нужно включить. Entity-manager вызывал путаницу и больше не требуется в последней версии Hibernate, а также javax.настойчивость-АФИ. Обратите внимание, я использую Java 10 здесь мне пришлось включить JAXB-api, чтобы обойти некоторые ошибки XML-привязки, а также добавить запись для модуля сохранения java в мой модуль-info.Java-файл.
построить.gradle
// https://mvnrepository.com/artifact/org.hibernate/hibernate-core compile('org.hibernate:hibernate-core:5.3.1.Final') // https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'модуль-инфо.java
// Used for HsqlDB - add the hibernate-core jar to build.gradle too requires java.persistence;С hibernate 5.3.1 вам не нужно указывать поставщика, ниже, в вашем постоянстве.XML-файл. Если он не указан, по умолчанию выбирается поставщик Hibernate.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>сохранение.XML-файл должен быть расположен в правильном каталоге, так:
src/main/resources/META-INF/persistence.xmlпереход через исходный код hibernate в отладчике Intellij, где он проверяет наличие диалекта, также вызвал точно такое же исключение из-за отсутствующего свойства диалекта в сохраняемости.XML-файл. Я добавил Это (добавьте правильный для вашего типа БД):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>Я все еще получал то же самое исключение после этого, поэтому шаг через отладчик снова в Intellij показал тестовую сущность, которую я пытался сохранить (простой пример родитель-ребенок) отсутствовали аннотации для OneToMany, ManyToOne отношений. Я исправил это, и исключение ушло, и мои сущности были сохранены в порядке.
вот моя полная окончательная настойчивость.XML-код:
<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="mick" transaction-type="RESOURCE_LOCAL"> <description> Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide </description> <!-- Provided in latest release of hibernate <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> --> <class>com.micks.scenebuilderdemo.database.Parent</class> <class>com.micks.scenebuilderdemo.database.Child</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/> <property name="javax.persistence.jdbc.url" value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/> <property name="javax.persistence.jdbc.user" value="sa"/> <property name="javax.persistence.jdbc.password" value=""/> <property name="hibernate.show_sql" value="true"/> <property name="hibernate.hbm2ddl.auto" value="create"/> <property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/> </properties> </persistence-unit> </persistence>Я, вероятно, потратил около половины дня на этот камень. Мой совет был бы начать очень просто-один тестовый объект с одним или двумя полями, так как кажется, что это исключение может иметь много причин.
если есть разные названия в
Persistence.createEntityManagerFactory("JPAService")в разных классах, чем вы получаете ошибку. путем рефакторинга можно получить разные имена что было в моем случае. В одном классе автоматически генерируетсяPersistence.createEntityManagerFactory("JPAService")наprivate void initComponents(), класс ContactsTable отличался отPersistence.createEntityManagerFactory("JPAServiceExtended")в классе DBManager.
шахта была решена путем добавления информации в persistence.xml например
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>а затем убедитесь, что у вас есть библиотека на пути к классам, например, в Maven добавить зависимость, как<dependency> <groupId>org.eclipse.persistence</groupId> <artifactId>eclipselink</artifactId> <version>2.5.0</version> </dependency>
проверить блок peristent имя
<persistence-unit name="com.myapp.model.jpa" transaction-type="RESOURCE_LOCAL"> public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa"; Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);
Comments