2017-10-06 105 views
0

集成Spring我试图整合与Hibernate春天,但我得到这个错误:错误而与休眠

[2017-10-06 05:26:14,475] Artifact spring-mvc-hibernate-example:war: java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDaoImp': Unsatisfied dependency expressed through field 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getSessionFactory' defined in com.boraji.tutorial.spring.config.AppConfig: Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution. Please see server.log for more details.

这里有一些文件:

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.boraji.tutorial.spring</groupId> 
    <artifactId>spring-mvc-hibernate-example</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <packaging>war</packaging> 
    <properties> 
    <failOnMissingWebXml>false</failOnMissingWebXml> 
    </properties> 
    <dependencies> 
    <!-- Spring MVC Dependency --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-webmvc</artifactId> 
     <version>4.3.7.RELEASE</version> 
    </dependency> 

    <!-- Spring ORM --> 
    <dependency> 
     <groupId>org.springframework</groupId> 
     <artifactId>spring-orm</artifactId> 
     <version>4.3.7.RELEASE</version> 
    </dependency> 

    <!-- Mysql Connector --> 
    <dependency> 
     <groupId>mysql</groupId> 
     <artifactId>mysql-connector-java</artifactId> 
     <version>6.0.6</version> 
    </dependency> 

    <!-- Hibernate ORM --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-core</artifactId> 
     <version>5.2.10.Final</version> 
    </dependency> 

    <!-- Hibernate-C3P0 Integration --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-c3p0</artifactId> 
     <version>5.2.10.Final</version> 
    </dependency> 

    <!-- c3p0 --> 
    <dependency> 
     <groupId>com.mchange</groupId> 
     <artifactId>c3p0</artifactId> 
     <version>0.9.5.2</version> 
    </dependency> 

    <!-- Hibernate Validator --> 
    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate-validator</artifactId> 
     <version>5.4.1.Final</version> 
    </dependency> 

    <!-- JSTL Dependency --> 
    <dependency> 
     <groupId>javax.servlet.jsp.jstl</groupId> 
     <artifactId>javax.servlet.jsp.jstl-api</artifactId> 
     <version>1.2.1</version> 
    </dependency> 
    <dependency> 
     <groupId>taglibs</groupId> 
     <artifactId>standard</artifactId> 
     <version>1.1.2</version> 
    </dependency> 

    <!-- Servlet Dependency --> 
    <dependency> 
     <groupId>javax.servlet</groupId> 
     <artifactId>javax.servlet-api</artifactId> 
     <version>3.1.0</version> 
     <scope>provided</scope> 
    </dependency> 

    <!-- JSP Dependency --> 
    <dependency> 
     <groupId>javax.servlet.jsp</groupId> 
     <artifactId>javax.servlet.jsp-api</artifactId> 
     <version>2.3.1</version> 
     <scope>provided</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.hibernate</groupId> 
     <artifactId>hibernate</artifactId> 
     <version>3.5.4-Final</version> 
    </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-log4j12</artifactId> 
      <version>1.8.0-alpha2</version> 
     </dependency> 
    </dependencies> 

</project> 

初始值设定项:

public class MyWebAppInitializer 
     extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[] { AppConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return new Class[] { WebConfig.class }; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 
} 

应用程序配置

@Configuration 
@PropertySource("classpath:db.properties") 
@EnableTransactionManagement 
@ComponentScans(value = { @ComponentScan("com.boraji.tutorial.spring.dao"), 
     @ComponentScan("com.boraji.tutorial.spring.service") }) 
public class AppConfig { 

    @Autowired 
    private Environment env; 

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

     Properties props = new Properties(); 
     // Setting JDBC properties 
     props.put(DRIVER, env.getProperty("mysql.driver")); 
     props.put(URL, env.getProperty("mysql.url")); 
     props.put(USER, env.getProperty("mysql.user")); 
     props.put(PASS, env.getProperty("mysql.password")); 

     // Setting Hibernate properties 
     props.put(SHOW_SQL, env.getProperty("hibernate.show_sql")); 
     props.put(HBM2DDL_AUTO, env.getProperty("hibernate.hbm2ddl.auto")); 
     props.put(DIALECT, env.getProperty("hibernate.dialect")); 

     // Setting C3P0 properties 
     props.put(C3P0_MIN_SIZE, 
      env.getProperty("hibernate.c3p0.min_size")); 
     props.put(C3P0_MAX_SIZE, 
      env.getProperty("hibernate.c3p0.max_size")); 
     props.put(C3P0_ACQUIRE_INCREMENT, 
      env.getProperty("hibernate.c3p0.acquire_increment")); 
     props.put(C3P0_TIMEOUT, 
      env.getProperty("hibernate.c3p0.timeout")); 
     props.put(C3P0_MAX_STATEMENTS, 
      env.getProperty("hibernate.c3p0.max_statements")); 

     factoryBean.setHibernateProperties(props); 
     factoryBean.setAnnotatedClasses(User.class); 
     return factoryBean; 
    } 

    @Bean 
    public HibernateTransactionManager getTransactionManager() { 
     HibernateTransactionManager transactionManager = new HibernateTransactionManager(); 
     transactionManager.setSessionFactory(getSessionFactory().getObject()); 
     return transactionManager; 
    } 
} 

db.properties:

# MySQL properties 
mysql.driver=com.mysql.jdbc.Driver 
mysql.url=jdbc:mysql://localhost/test 
mysql.user=root 
mysql.password=root 

# Hibernate propert[2017-10-06 05:26:14,475] Artifact spring-mvc-hibernate-example:war: java.io.IOException: com.sun.enterprise.admin.remote.RemoteFailureException: Error occurred during deployment: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.springframework.beans.factory.UnsatisfiedDependencyException: Error creating bean with name 'userDaoImp': Unsatisfied dependency expressed through field 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'getSessionFactory' defined in com.boraji.tutorial.spring.config.AppConfig: Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution. Please see server.log for more details.ies 
hibernate.show_sql=true 
hibernate.hbm2ddl.auto=update 
hibernate.dialect=org.hibernate.dialect.MySQLDialect 

#C3P0 properties 
hibernate.c3p0.min_size=5 
hibernate.c3p0.max_size=20 
hibernate.c3p0.acquire_increment=1 
hibernate.c3p0.timeout=1800 
hibernate.c3p0.max_statements=150 

userDAO的:

@Repository 
public class UserDaoImp implements UserDao { 

    @Autowired 
    private SessionFactory sessionFactory; 


    public void save(User user) { 
     sessionFactory.getCurrentSession().save(user); 
    } 


    public List<User> list() { 
     @SuppressWarnings("unchecked") 
     TypedQuery<User> query = sessionFactory.getCurrentSession().createQuery("from User"); 
     return query.getResultList(); 
    } 

} 

我看到很多类似的问题在这里,但它并没有帮助。我的申请中会出现什么问题?

回答

0

DRIVER,URL,USER和PASS都是静态字段。确保你导入了所有这些。另外,确保你导入了Spring Environment(而不是休眠)。

import static org.hibernate.cfg.Environment.*; 
import org.springframework.core.env.Environment;