2017-06-15 38 views
0

我在學習Hibernate,並且遇到了這個錯誤,我嘗試了不同的方法,但是我仍然遇到了難以解決的問題。任何幫助真的很感激。提前致謝。這是我的配置:使用Mysql進行Java Hibernate配置

public class HibernateUtil { 

     private static final SessionFactory sessionFactory = buildSessionFactory(); 

     private static SessionFactory buildSessionFactory() { 
      try { 
       Configuration configuration = new Configuration();// Knows how we want hibernate to perform 
       configuration.addAnnotatedClass(User.class); 
       return configuration 
          .buildSessionFactory(new StandardServiceRegistryBuilder().build());// returns a Session Factory 

      } catch (Exception e) { 
       e.printStackTrace(); 
       throw new RuntimeException("There was an error building the factory"); 
      } 

     } 
     /* 
     * Provides our application with access to our singleton. 
     * The way the singleton pattern works, that field (sessionFactory) 
     * and that method (buildSessionFactory()) our both private, so we 
     * cannot access them. However, our public method (getSessionFactory()) 
     * within that singleton can access the private fields of this class. 
     * So, it can return our singleton implementation of the Session Factory. 
     */ 
     public static SessionFactory getSessionFactory(){ 
      return sessionFactory; 
     } 
    } 

The hibernate.properties file looks like this: 

    hibernate.connection.username=infinite 
    hibernate.connection.password=skills 
    hibernate.connection.url=jdbc:mysql://localhost:3306/ifinances?useSSL=false 
    hibernate.connection.driver_class=com.mysql.cj.jdbc.Driver 
    hibernate.dialect=org.hibernate.dialect.MySQL5Dialect 

回報

import org.hibernate.Session; 

public class Application { 
    public static void main(String[] args) { 

     Session session = HibernateUtil.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     session.close(); 
    } 
} 

return 

    The stacktrace error: 
    INFO - HHH000115: Hibernate connection pool size: 20 (min=1) 
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) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.handleTypes(MetadataBuildingProcess.java:352) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:111) 
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.build(MetadataBuildingProcess.java:83) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:418) 
    at org.hibernate.boot.internal.MetadataBuilderImpl.build(MetadataBuilderImpl.java:87) 
    at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:691) 
    at com.infiniteskills.data.HibernateUtil.buildSessionFactory(HibernateUtil.java:18) 
    at com.infiniteskills.data.HibernateUtil.<clinit>(HibernateUtil.java:11) 
    at com.infiniteskills.data.Application.main(Application.java:8) 
Caused by: org.hibernate.exception.JDBCConnectionException: Error calling Driver#connect 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator$1$1.convert(BasicConnectionCreator.java:105) 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.convertSqlException(BasicConnectionCreator.java:123) 
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:41) 
    at org.hibernate.engine.jdbc.connections.internal.BasicConnectionCreator.createConnection(BasicConnectionCreator.java:58) 
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.addConnections(PooledConnections.java:123) 
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:42) 
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections.<init>(PooledConnections.java:20) 
    at org.hibernate.engine.jdbc.connections.internal.PooledConnections$Builder.build(PooledConnections.java:161) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.buildPool(DriverManagerConnectionProviderImpl.java:109) 
    at org.hibernate.engine.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:72) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:94) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:242) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:210) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.buildJdbcConnectionAccess(JdbcEnvironmentInitiator.java:145) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:66) 
    at org.hibernate.engine.jdbc.env.internal.JdbcEnvironmentInitiator.initiateService(JdbcEnvironmentInitiator.java:35) 
    at org.hibernate.boot.registry.internal.StandardServiceRegistryImpl.initiateService(StandardServiceRegistryImpl.java:88) 
    at org.hibernate.service.internal.AbstractServiceRegistryImpl.createService(AbstractServiceRegistryImpl.java:259) 
    ... 15 more 
Caused by: java.sql.SQLException: The server time zone value 'RTZ 3 (????)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:545) 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:513) 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:505) 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:479) 
    at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:489) 
    at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:69) 
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1606) 
    at com.mysql.cj.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:633) 
    at com.mysql.cj.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:347) 
    at com.mysql.cj.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:219) 
    at org.hibernate.engine.jdbc.connections.internal.DriverConnectionCreator.makeConnection(DriverConnectionCreator.java:38) 
    ... 30 more 
Caused by: com.mysql.cj.core.exceptions.InvalidConnectionAttributeException: The server time zone value 'RTZ 3 (????)' is unrecognized or represents more than one time zone. You must configure either the server or JDBC driver (via the serverTimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support. 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) 
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source) 
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source) 
    at java.lang.reflect.Constructor.newInstance(Unknown Source) 
    at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:54) 
    at com.mysql.cj.core.exceptions.ExceptionFactory.createException(ExceptionFactory.java:73) 
    at com.mysql.cj.jdbc.util.TimeUtil.getCanonicalTimezone(TimeUtil.java:118) 
    at com.mysql.cj.mysqla.MysqlaSession.configureTimezone(MysqlaSession.java:293) 
    at com.mysql.cj.jdbc.ConnectionImpl.initializePropsFromServer(ConnectionImpl.java:2399) 
    at com.mysql.cj.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:1739) 
    at com.mysql.cj.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:1596) 
    ... 34 more 
Exception in thread "main" java.lang.ExceptionInInitializerError 
    at com.infiniteskills.data.Application.main(Application.java:8) 
Caused by: java.lang.RuntimeException: There was an error building the factory 
    at com.infiniteskills.data.HibernateUtil.buildSessionFactory(HibernateUtil.java:22) 
    at com.infiniteskills.data.HibernateUtil.<clinit>(HibernateUtil.java:11) 
+0

怎麼了?請提供任何提示?我已經更新了代碼。 – Capfer

+0

「導致:java.sql.SQLException:服務器時區值'RTZ 3(????)'無法識別」看起來,這是JDBC和您的數據庫服務器之間的問題。我建議尋找「RTZ 3」的價值來源。嘗試先用DB客戶端工具查看服務器。 – Steve11235

+0

Steeve11235,你是對的。那是一個丑角。我已經通過將mysql-connector java從6.0.6更改爲5.1.41來修復它,並且一切工作都很好。非常感謝。 – Capfer

回答

相關問題