lorsque vous utilisez Spring & Hibernate, avez-vous déjà rencontré un avertissement de journal indiquant
WARN o.hibernate.ejb.HibernatePersistence - HHH015016: a rencontré un obsolète javax.persistence.spi.PersistenceProvider [org.hibernate.ejb.HibernatePersistence]; utilisez plutôt [org.hibernate.jpa.HibernatePersistenceProvider].
Comment gérer ça? Merci pour toute réponse.
Ça devrait être
org.hibernate.jpa.HibernatePersistenceProvider
Jetez un oeil à this .
Obsolète.
Utilisez HibernatePersistenceProvider à la place
Si vous travaillez avec Spring Data JPA et Java Configuration, vous pourrez le résoudre en ajoutant le code suivant dans votre Entity Manager Factory:
factory.setPersistenceProvider (nouveau 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();
}
Vous trouverez un bon exemple de configuration Hibernate avec Spring Data JPA ici: http://spring.io/guides/tutorials/data/3/
J'ai rencontré ce problème lors de l'utilisation du gestionnaire d'entités de JPA dans le contexte Spring, avec transaction-type = "RESOURCE_LOCAL" dans persistence.xml.
Ce n'est pas toujours un bug. En fait, j'avais le mauvais fournisseur configuré.
Je viens de changer le fournisseur dans persistence.xml de
<provider>org.hibernate.ejb.HibernatePersistence</provider>
à
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
et ça marche bien.
Notez que le package est passé de EJB à JPA
Pour les utilisateurs qui n'utilisent pas SPRING:
Nous pouvons remplacer le bootstrap standard javax.persistence par un bootstrap spécifique à Hibernate.
Vieux:
EntityManagerFactory emf = Persistence.createEntityManagerFactory(
PERSISTENCE_UNIT, props );
Nouveau:
PersistenceProvider provider = new HibernatePersistenceProvider();
EntityManagerFactory emf = provider.createEntityManagerFactory(
PERSISTENCE_UNIT, props);
Les avertissements obsolètes devraient maintenant disparaître. Le problème était toujours présent dans 4.3.1.Final. Dans 5.1.0.Final il devrait être corrigé.
Vous obtenez ce message car la classe org.hibernate.ejb.HibernatePersistence
est obsolète. Sous mon persistence.xml
fichier J'ai trouvé que la classe de fournisseur avait org.hibernate.ejb.HibernatePersistence
et je l'ai changé en org.hibernate.jpa.HibernatePersistenceProvider
comme mentionné dans le message d'avertissement 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>
Après avoir changé votre org.hibernate.ejb.HibernatePersistence
à org.hibernate.jpa.HibernatePersistenceProvider
dans le persistence.xml
Modifiez également le hibernate-entitymanager
version de dépendance, obtenez la dernière version 5.2.10 . Final qui a corrigé le bogue. Voici:
http://mvnrepository.com/artifact/org.hibernate/hibernate-entitymanager/5.2.10.Final
ça a marché pour moi
J'ai changé la référence en:
org.hibernate.jpa.HibernatePersistenceProvider
mais ça n'a pas marché.
Ensuite, j'ai supprimé toutes les références aux bibliothèques jar Hibernate 4.x, téléchargé la dernière version (5.2.7), puis ajouté ces fichiers jar et cela fonctionne enfin.