如何在应用程序启动期间处理org.hibernate.exception.GenericJDBCException?

时间:2018-04-13 22:22:25

标签: java mysql spring hibernate jdbc

我正在学习hibernate / spring mvc,启动服务器时出现异常。我在intellij工作,这个数据库连接到我的IDE并且工作正常(也是"测试连接"没关系),但是当我尝试在配置文件中创建一个bean时,它不是工作在一起。 可能有什么问题?

@Configuration
@EnableTransactionManagement
@ComponentScan("com.packt.webstore")
public class RootApplicationContextConfig {
@Bean
public DataSource getDataSource() {
    BasicDataSource dataSource = new BasicDataSource();
    dataSource.setUsername("root");
    dataSource.setPassword("root");
    dataSource.setUrl("jdbc:mysql://localhost:3306/shop");
    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    return dataSource;
}

@Bean
public LocalSessionFactoryBean getSessionFactory() {
    LocalSessionFactoryBean factoryBean = new 
    LocalSessionFactoryBean();
    factoryBean.setDataSource(getDataSource());

    Properties props = new Properties();
    props.put("hibernate.show_sql", "true");
    props.put("hibernate.hbm2ddl.auto", "update");
    props.put("hibernate.dialect",
        "org.hibernate.dialect.MySQLDialect");
    factoryBean.setHibernateProperties(props);
    factoryBean.setPackagesToScan("com.packt.webstore");
    return factoryBean;
}

@Bean
public HibernateTransactionManager getTransactionalManager() {
    HibernateTransactionManager transactionManager = new
            HibernateTransactionManager();

    transactionManager.setSessionFactory(getSessionFactory()
        .getObject());
    return transactionManager;
  }
}

异常日志:

Error creating bean with name 'productController': Unsatisfied 
dependency expressed through field 'productService': Error creating 
bean with name 'productServiceImpl': Unsatisfied dependency expressed 
through field 'products': Error creating bean with name 
'productDaoImpl': Unsatisfied dependency expressed through field 
'factory': Error creating bean with name 'getSessionFactory' defined in 
com.packt.webstore.config.RootApplicationContextConfig: Invocation of 
init method failed; nested exception is 
org.hibernate.exception.GenericJDBCException: Unable to open JDBC 
Connection for DDL execution; 

2 个答案:

答案 0 :(得分:2)

  

无法为DDL执行打开JDBC连接

告诉您在代码执行的那一刻,不能为配置的数据库建立Connection。这可能是由许多原因造成的,因此我只列出最可能的原因:

  1. MySQL根本没有运行。
    • 你开始了吗?通过检查正在运行的进程列表进行验证(取决于操作系统)。
  2. MySQL没有侦听端口3306,这是默认端口。
    • 你改变了吗?如果是这样,请相应地更改您的代码/配置。
  3. 鉴于MySQL正在运行和监听(端口3306),用户 root的密码不是root
    • 您是否将密码设置为root?使用这些凭据通过mysql CLI本地连接。如果这样做,您可以排除密码不匹配。
  4. 用户root缺少使用名称shop连接到数据库的权限。
    • 您是否更改了限制访问root数据库的用户shop的权限?如果是,请检查和/或更改此用户的本地连接权限(GRANT)。
  5. 希望这份清单有所帮助。

    更新-1

    根据mysql-connector.jar的驱动程序版本,您必须仔细检查/选择驱动程序类的名称:

    • MySQL Connector / J 5.x.
      • jdbc.driver_class => com.mysql.jdbc.Driver
    • MySQL Connector / J 6.x +
      • jdbc.driver_class => com.mysql.cj.jdbc.Driver

答案 1 :(得分:0)

更改为Hibernate 5和mysql 5.1.39