无法创建所请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL

14 浏览
0 Comments

无法创建所请求的服务[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 List list() {
        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 List list();
}

\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)

0
0 Comments

在上述代码中,我们可以看到一个名为的属性,它指定了连接到MySQL数据库的URL。然而,这段代码中缺少了一个必要的属性serverTimezone

由于缺少了serverTimezone属性,当尝试创建与MySQL数据库的连接时,会出现以下错误消息:Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL。

为了解决这个问题,我们需要在连接URL中添加serverTimezone属性,并将其设置为合适的时区。例如,我们可以将的值修改为:jdbc:mysql://localhost:3306/test?serverTimezone=Asia/Shanghai。

通过添加serverTimezone属性并设置合适的时区,我们可以成功创建与MySQL数据库的连接,从而解决了这个问题。

0
0 Comments

无法创建所请求的服务[org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]-MySQL的问题通常是由于以下原因引起的:连接驱动程序的属性connection.driver_classmysql-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版本设置正确的驱动程序类,即可解决此问题。

0
0 Comments

在使用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这个问题了。

0