Ответ 1
Это должно быть
org.hibernate.jpa.HibernatePersistenceProvider
Посмотрите .
Устаревшие.
Используйте HibernatePersistenceProvider вместо
когда вы используете spring и Hibernate, вы когда-нибудь встречали предупреждение журнала, в котором говорится
WARN o.hibernate.ejb.HibernatePersistence - HHH015016: Обнаружен a устаревший javax.persistence.spi.PersistenceProvider [Org.hibernate.ejb.HibernatePersistence]; использование [org.hibernate.jpa.HibernatePersistenceProvider].
Как с этим справиться? Спасибо за любой ответ.
Это должно быть
org.hibernate.jpa.HibernatePersistenceProvider
Посмотрите .
Устаревшие.
Используйте HibernatePersistenceProvider вместо
Если вы работаете с Spring Data JPA и конфигурацией Java, вы сможете решить эту проблему, добавив следующий код в свой Entity Manager Factory:
factory.setPersistenceProvider(новый HibernatePersistenceProvider());
@Bean
public EntityManagerFactory entityManagerFactory() throws SQLException {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
vendorAdapter.setGenerateDdl(true);
vendorAdapter.setShowSql(true);
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setJpaVendorAdapter(vendorAdapter);
**factory.setPersistenceProvider(new HibernatePersistenceProvider());**
factory.setPackagesToScan("com.company.appname.persistence.domain");
factory.setDataSource(dataSource());
factory.setJpaProperties(hibernateProperties());
factory.afterPropertiesSet();
return factory.getObject();
}
Вы найдете хороший пример конфигурации Hibernate с Spring Data JPA здесь: http://spring.io/guides/tutorials/data/3/
Если эта проблема возникла при работе с JPA Entity Manager в контексте Spring, имея тип транзакции = "RESOURCE_LOCAL" в файле persistence.xml.
Это не всегда ошибка. У меня на самом деле был настроен неверный провайдер.
Я просто изменил поставщика в persistence.xml из
<provider>org.hibernate.ejb.HibernatePersistence</provider>
к
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
и он отлично работает.
Обратите внимание, что пакет изменился с EJB на JPA
Для пользователей, которые не используют SPRING:
Мы можем заменить стандартную загрузку javax.persistence специальным Hibernate.
Старый:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
PERSISTENCE_UNIT, props );
Новое:
PersistenceProvider provider = new HibernatePersistenceProvider();
EntityManagerFactory emf = provider.createEntityManagerFactory(
PERSISTENCE_UNIT, props);
Устаревшие предупреждения теперь должны исчезнуть. Проблема все еще присутствовала в 4.3.1.Final. В 5.1.0.Final это должно быть исправлено.
Вы получите это сообщение, потому что класс org.hibernate.ejb.HibernatePersistence
устарел. В моем файле persistence.xml
я обнаружил, что класс поставщика имеет org.hibernate.ejb.HibernatePersistence
, и я изменил его на org.hibernate.jpa.HibernatePersistenceProvider
, как указано в предупреждающем сообщении stacktrace.
persistence.xml
<persistence-unit name="personPersistenceUnit" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>Person</class>
<properties>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/db_name"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect" />
....
</properties>
</persistence-unit>
После изменения org.hibernate.ejb.HibernatePersistence
на org.hibernate.jpa.HibernatePersistenceProvider
в persistence.xml
Измените также версию зависимости hibernate-entitymanager
, получите последнюю версию 5.2.10. Финал, который исправил ошибку. Вот:
http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.10.Final
это сработало для меня
Я изменил ссылку на:
org.hibernate.jpa.HibernatePersistenceProvider
но это не сработало.
Затем я удалил все ссылки на Hibernate 4.x jar libs, загрузил последнюю версию (5.2.7), затем добавил эти файлы jar и, наконец, работает.