Javax.persistence.PersistenceException: поставщик констант для EntityManager с именем customerManager
Я новичок в JPA и Hibernate. После прочтения некоторых онлайн-материалов я теперь понимаю, что такое Hibernate и как его можно использовать с JPA.
Теперь я пытаюсь запустить этот учебник JPA и Hibernate. Я сделал все, что они упомянули в этом уроке.
У меня нет Oracle DB, а только MySQL. Поэтому я внес некоторые изменения в persistence.xml
, используя мое понимание JPA и Hibernate (я не знаю, правильно это или нет... Кажется, это так.)
Вот мой persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Customer</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="1234"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>
Но я, похоже, не получаю вывод, который они описывают. Это дает мне:
Customer id before creation:null
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named customerManager
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at CustomerDAO.create(CustomerDAO.java:8)
at CustomerDAO.main(CustomerDAO.java:22)
Любые предложения будут оценены.
Update:
Я внес изменения, которые просят сделать. Но, все еще получая строки ошибки asme!!!
Они ничего не упомянули о orm.xml в этом учебнике. может ли это быть причиной проблемы!!!
Ответы
Ответ 1
Ваш persistence.xml
недействителен и EntityManagerFactory
не может быть создан. Это должно быть:
<persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0">
<persistence-unit name="customerManager" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>Customer</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="1234"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/general"/>
<property name="hibernate.max_fetch_depth" value="3"/>
</properties>
</persistence-unit>
</persistence>
(Обратите внимание, что элементы <property>
закрыты, они не должны быть вложенными)
Обновление:. Я прошел учебник, и вам придется изменить стратегию генерации Id
при использовании MySQL (так как MySQL не поддерживает последовательности). Я предлагаю использовать стратегию AUTO
(по умолчанию используется IDENTITY с MySQL). Для этого удалите аннотацию SequenceGenerator
и измените код следующим образом:
@Entity
@Table(name="TAB_CUSTOMER")
public class Customer implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name="CUSTOMER_ID", precision=0)
private Long customerId = null;
...
}
Это должно помочь.
PS: вы также должны указать log4j.properties
, как было предложено.
Ответ 2
только для полноты.
возникает другая ситуация, вызывающая эту ошибку: отсутствует файл META-INF/services/javax.persistence.spi.PersistenceProvider. для hibernate он находится в hibernate-entitymanager-XXX.jar, поэтому, если hibernate-entitymanager-XXX.jar не находится в вашем пути к классу, вы также получите эту ошибку.
это сообщение об ошибке настолько вводит в заблуждение, и мне стоит часа, чтобы понять его.
см. этот вопрос.
Ответ 3
У меня была такая же проблема сегодня. Мой persistence.xml оказался не в том месте. Мне пришлось поместить его по следующему пути:
project/src/main/resources/META-INF/persistence.xml
Ответ 4
Я столкнулся с той же проблемой. Я понял, что я использовал класс провайдера Wrong в persistence.xml
Для спящего режима это должно быть
<provider>org.hibernate.ejb.HibernatePersistence</provider>
А для EclipseLink это должно быть
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
Ответ 5
Если вы используете Hibernate 5.2.10.Final, вам следует изменить
<provider>org.hibernate.ejb.HibernatePersistence</provider>
to
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
в вашем persistence.xml
В соответствии с Hibernate 5.2.2: провайдер отсутствия сущности для EntityManager
Ответ 6
Слишком поздно, но я получил ту же проблему и исправил ее переключение schemalocation в schemaLocation в файле persistence.xml (строка 1).
Ответ 7
мой опыт говорит мне, что отсутствующий файл persistence.xml также генерирует одно и то же исключение.
я поймал ту же самую ошибку msg сегодня, когда я попытался запустить пакет jar, упакованный ant.
когда я использовал jar tvf для проверки содержимого файла jar, я понял, что "ant" забыл упаковать файл persistnece.xml для меня.
после того, как я вручную упаковал файл jar, ошибка msg исчезла.
поэтому я считаю, что вам следует попробовать простую установку META-INF под каталог src и размещение там вашего persistence.xml.
Ответ 8
Я видел эту ошибку, для меня проблема заключалась в том, что в абсолютном пути persistance.xml было пространство, удаление которого мне помогло.
Ответ 9
У меня также возникла такая же проблема, когда я пытался настроить диспетчер объектов JPA в Tomcat 8. Сначала у меня проблема с классом SystemException, который не найден, и, следовательно, entityManagerFactory не создается. Я удалил зависимость менеджера сущностей спящего режима, а затем мой entityManagerFactory не смог найти поставщика устойчивости. После много исследований и времени стало известно, что администратор сущностей спящего режима должен найти какую-то конфигурацию. Затем верните контейнер менеджера объектов, а затем добавили JTA Api в качестве зависимости, и он работал нормально.