2010-12-10 24 views
2

J'utiliseHibernate: javax.persistence. * Propriétés du pilote cause UnsupportedOperationException: L'utilisateur doit fournir une connexion JDBC?

<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" /> 
<property name="javax.persistence.jdbc.url"  value="jdbc:mysql://localhost/whatever" /> 
<property name="javax.persistence.jdbc.user"  value="" /> 
<property name="javax.persistence.jdbc.password" value="" /> 

dans toutes mes JavaSE applications de test avec mise en veille prolongée sans problème. Cependant, lorsque vous utilisez le même dans un webapp (Tomcat) une exception est levée:

java.lang.UnsupportedOperationException: The user must supply a JDBC connection 
    org.hibernate.connection.UserSuppliedConnectionProvider.getConnection(UserSuppliedConnectionProvider.java:54) 
    org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446) 
    org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167) 
    org.hibernate.jdbc.AbstractBatcher.prepareQueryStatement(AbstractBatcher.java:161) 
    org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1596) 
    org.hibernate.loader.Loader.doQuery(Loader.java:717) 
    org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:270) 
    org.hibernate.loader.Loader.loadEntity(Loader.java:1933) 
    org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:86) 
    org.hibernate.loader.entity.AbstractEntityLoader.load(AbstractEntityLoader.java:76) 
    org.hibernate.persister.entity.AbstractEntityPersister.load(AbstractEntityPersister.java:3270) 
    org.hibernate.event.def.DefaultLoadEventListener.loadFromDatasource(DefaultLoadEventListener.java:496) 
    org.hibernate.event.def.DefaultLoadEventListener.doLoad(DefaultLoadEventListener.java:477) 
    org.hibernate.event.def.DefaultLoadEventListener.load(DefaultLoadEventListener.java:227) 
    org.hibernate.event.def.DefaultLoadEventListener.proxyOrLoad(DefaultLoadEventListener.java:285) 
    org.hibernate.event.def.DefaultLoadEventListener.onLoad(DefaultLoadEventListener.java:152) 
    org.hibernate.impl.SessionImpl.fireLoad(SessionImpl.java:1080) 
    org.hibernate.impl.SessionImpl.get(SessionImpl.java:997) 
    org.hibernate.impl.SessionImpl.get(SessionImpl.java:990) 
    org.hibernate.ejb.AbstractEntityManagerImpl.find(AbstractEntityManagerImpl.java:182) 
    com.kawoolutions.bbstats.servlet.BasketballStatsServlet.doGet(BasketballStatsServlet.java:405) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:690) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:803) 

je ne pouvais pas trouver quelque chose d'utile sur le net, alors j'ai attrapé une sauvegarde et a remarqué le seul changement que je fait est que je précédemment utilisé:

<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> 
<property name="hibernate.connection.url"   value="jdbc:mysql://localhost/whatever" /> 
<property name="hibernate.connection.username"  value="" /> 
<property name="hibernate.connection.password"  value="" /> 

Après avoir restauré les propriétés hibernate. *, l'exception a disparu!

Qu'est-ce qui ne va pas ici? Pourquoi les propriétés javax.persistence. * Fonctionnent-elles dans un environnement JavaSE mais pas dans ma webapp? C'est vraiment étrange ...

Répondre

4

javax.persistence.* Les propriétés ont été introduites dans JPA 2.0, c'est-à-dire dans Hibernate 3.5 et au-dessus. Si vous utilisez une version antérieure d'Hibernate, elles ne fonctionnent pas.

+0

J'utilise Hibernate 3.5.4 ... – Kawu

+0

Je viens d'essayer le JAR Hibernate 3.6, ici même. – Kawu

+2

@Kawu: Assurez-vous de ne pas avoir d'anciens fichiers Hibernate dans le classpath (en particulier 'hibernate-entitymanager'). – axtavt