无法创建所请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL
无法创建所请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL
我是Hibernate的新手。我目前正在使用Spring Boot框架,并尝试通过Hibernate创建数据库表。\n我知道之前有人问过同样的问题,但我似乎无法根据我的环境解决错误。\nhibernate.cfg.xml\n
org.mm.mysql.Driver jdbc:mysql://localhost:3306 user pass true org.hibernate.MySQLDialect org.hibernate.NoCacheProvider 1 update
\n主类\n
public static void main(String[] args) throws Exception { SpringApplication.run(WebApplication.class, args); Configuration cfg = new Configuration(); cfg.configure("hibernate.cfg.xml"); SessionFactory factory = cfg.buildSessionFactory(); Session session = factory.openSession(); Transaction t = session.beginTransaction(); AdultParticipant ap = new AdultParticipant(); ap.setFirstName("User"); ap.setLastName("UserLastName"); session.persist(ap); t.commit(); session.close(); System.out.println("保存成功"); }
\nPOJO类\n
@Entity @Table(name = "adultparticipant") public class AdultParticipant { @GeneratedValue @Id @Column(name = "id") private int id; @Column(name = "firstName") private String firstName; @Column(name = "lastName") private String lastName; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } }
\nDAOImpl类\n
public class AdultParticipantDAOImpl implements AdultParticipantDAO { private SessionFactory sessionFactory; public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } @Override public void save(AdultParticipant ap) { Session session = this.sessionFactory.openSession(); Transaction tx = session.beginTransaction(); session.persist(ap); tx.commit(); session.close(); } @SuppressWarnings("unchecked") @Override public Listlist() { Session session = this.sessionFactory.openSession(); List adultParticipants = session.createQuery("from AdultParticipant").list(); session.close(); return adultParticipants; } }
\nDAO类\n
public interface AdultParticipantDAO { public void save(AdultParticipant ap); public Listlist(); }
\nPOM.xml\n
4.0.0 hello-springboot hello-springboot hello-springboot war org.springframework.boot spring-boot-starter-parent 1.3.5.RELEASE 1.8 org.springframework.boot spring-boot-starter-web org.springframework.boot spring-boot-starter-tomcat provided org.apache.tomcat.embed tomcat-embed-jasper provided mysql mysql-connector-java 5.1.40 org.springframework.boot spring-boot-maven-plugin
\n控制台错误信息\n
2017-03-13 11:48:40.512 WARN 9532 --- [ main] org.hibernate.orm.connections.pooling : HHH10001002: Using H ibernate built-in connection pool (not for production use!) Exception in thread "main" org.hibernate.service.spi.ServiceException: Unable to create requested service [org.hibernate .engine.jdbc.env.spi.JdbcEnvironment] at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:271) at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:233) at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:51)
在上述代码中,我们可以看到一个名为serverTimezone
。
由于缺少了serverTimezone
属性,当尝试创建与MySQL数据库的连接时,会出现以下错误消息:Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL。
为了解决这个问题,我们需要在连接URL中添加serverTimezone
属性,并将其设置为合适的时区。例如,我们可以将
通过添加serverTimezone
属性并设置合适的时区,我们可以成功创建与MySQL数据库的连接,从而解决了这个问题。
无法创建所请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL的问题通常是由于以下原因引起的:连接驱动程序的属性connection.driver_class
与mysql-connector
jar不兼容。
如果使用的是mysql-connector
版本小于5.5.xx
,则需要将驱动程序设置为com.mysql.jdbc.Driver
。
如果使用的是mysql-connector
版本大于5.5.xx
,则需要将驱动程序设置为com.mysql.cj.jdbc.Driver
。
解决此问题的方法是根据所使用的mysql-connector
版本,将连接驱动程序的属性connection.driver_class
设置为相应的驱动程序类。
以下是解决方法的代码示例:
// 如果使用的是mysql-connector版本小于5.5.xx hibernateProperties.setProperty("connection.driver_class", "com.mysql.jdbc.Driver"); // 如果使用的是mysql-connector版本大于5.5.xx hibernateProperties.setProperty("connection.driver_class", "com.mysql.cj.jdbc.Driver");
通过根据所使用的mysql-connector
版本设置正确的驱动程序类,即可解决此问题。
在使用Hibernate时,有些用户可能会遇到以下错误信息:Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL。这个问题的出现是由于使用了错误的MySQL驱动程序导致的。解决这个问题的方法是升级MySQL驱动程序到mysql-connector-java - 8.0.17,并且对于使用大于MySQL 5.5版本的用户,需要将驱动程序属性从com.mysql.jdbc.Driver更改为com.mysql.cj.jdbc.Driver。
具体的解决方法如下:
1. 升级MySQL驱动程序到mysql-connector-java - 8.0.17。你可以通过点击这里来下载最新的驱动程序。
2. 对于使用大于MySQL 5.5版本的用户,需要将驱动程序属性从com.mysql.jdbc.Driver更改为com.mysql.cj.jdbc.Driver。
如果你在hibernate.properties文件中配置了驱动程序属性,你需要将以下行添加到该文件中:
hibernate.connection.driver_class = com.mysql.cj.jdbc.Driver
如果你在hibernate.cfg.xml文件中配置了驱动程序属性,你需要将以下行添加到该文件中:
<property name="connection.driver_class">com.mysql.cj.jdbc.Driver</property>
通过以上步骤,你就可以解决Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL这个问题了。