当我尝试在Tomcat 7上运行我的JSF应用程序时,它将引发此异常。
Caused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/test at java.sql.DriverManager.getConnection(Unknown Source) at java.sql.DriverManager.getConnection(Unknown Source) at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.getConnection(DriverManagerConnectionProviderImpl.java:192) at org.hibernate.internal.AbstractSessionImpl$NonContextualJdbcConnectionAccess.obtainConnection(AbstractSessionImpl.java:278) at org.hibernate.engine.jdbc.internal.LogicalConnectionImpl.obtainConnection(LogicalConnectionImpl.java:297) ... 51 more
如果我在创建EntitiyManagerFactory之前添加此行,则可以正常工作。
Class.forName("com.mysql.jdbc.Driver"); emf = Persistence.createEntityManagerFactory("manager1");
我的依赖是
<dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.1.2.Final</version> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.19</version> </dependency>
我的应用程序也可以正常运行tomcat 6,而无需添加 Class.forName("com.mysql.jdbc.Driver");
Class.forName("com.mysql.jdbc.Driver");
有解决这个问题的主意吗?谢谢
第一个也是实际的解决方案:尝试使用Hibernate 4.1.0和4.1.3.Final。
在最终跌入https://forum.hibernate.org/viewtopic.php?p=2454336之前,我在Hibernate 4.1.2上遇到了此问题。据我所知,Tomcat的更高版本(针对DeviceManager的漏洞性质的修复程序)与Hibernate 4.1.2之间有些不兼容。
其他解决方法是像Brad Whitaker的回答中那样显式调用驱动程序的注册,或者通过driverManagerProtection="false"在$ CATALINA_HOME / conf / server.xml中的侦听器定义中添加来确保JreMemoryLeakPreventionListener不会保护DriverManager-
driverManagerProtection="false"
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" driverManagerProtection="false">