Java 在Spring Core Maven项目中将Hibernate与H2数据库一起使用时出现未满足的Pendency异常

Java 在Spring Core Maven项目中将Hibernate与H2数据库一起使用时出现未满足的Pendency异常,java,spring,hibernate,h2,Java,Spring,Hibernate,H2,上下文初始化期间遇到异常-正在取消 刷新尝试: org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“categoryDAO”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:不满意 通过方法“getCategoryDao”参数0表示的依赖关系: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.sho

上下文初始化期间遇到异常-正在取消 刷新尝试: org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“categoryDAO”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:不满意 通过方法“getCategoryDao”参数0表示的依赖关系: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:Bean 工厂方法实例化失败;嵌套异常是 org.springframework.beans.BeanInstantiationException:未能 实例化[org.hibernate.SessionFactory]:工厂方法 “getSessionFactory”引发异常;嵌套异常是 java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;;嵌套 例外情况为org.springframework.beans.factory.BeanCreationException: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:Bean 通过工厂方法实例化失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:未能 实例化[org.hibernate.SessionFactory]:工厂方法 “getSessionFactory”引发异常;嵌套异常为 java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;异常 在线程“main”中 org.springframework.beans.factory.unsatifiedDependencyException: 创建名为“categoryDAO”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:不满意 通过方法“getCategoryDao”参数0表示的依赖关系: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:Bean 通过工厂方法实例化失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:未能 实例化[org.hibernate.SessionFactory]:工厂方法 “getSessionFactory”引发异常;嵌套异常为 java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;;嵌套 例外情况为org.springframework.beans.factory.BeanCreationException: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:Bean 通过工厂方法实例化失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:未能 实例化[org.hibernate.SessionFactory]:工厂方法 “getSessionFactory”引发异常;嵌套异常为 java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;位于 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:749) 在 org.springframework.beans.factory.support.ConstructorResolver.InstantiationUsingFactoryMethod(ConstructorResolver.java:467) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.InstanceUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:230) 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:302) 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:197) 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.PreInstanceSingleton(DefaultListableBeanFactory.java:776) 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:861) 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:541) 位于com.niit.shoppingcart.CategoryTest.main(CategoryTest.java:13) 原因:org.springframework.beans.factory.BeanCreationException: 创建中定义了名为“sessionFactory”的bean时出错 com.niit.shoppingcart.config.ApplicationContextConfig:Bean 通过工厂方法实例化失败;嵌套异常为 org.springframework.beans.BeanInstantiationException:未能 实例化[org.hibernate.SessionFactory]:工厂方法 “getSessionFactory”引发异常;嵌套异常为 java.lang.NoSuchMethodError: javax.persistence.Table.indexes()[Ljavax/persistence/Index;位于 org.springframework.beans.factory.support.ConstructorResolver.InstantiationUsingFactoryMethod(ConstructorResolver.java:599) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.InstanceUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1123) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1018) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:510) 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:482) 在 org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306) 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSing
 package com.niit.shoppingcart.config;

    import java.util.Properties;

    import javax.sql.DataSource;

    import org.apache.commons.dbcp2.BasicDataSource;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.ComponentScan;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.orm.hibernate4.HibernateTransactionManager;
    import org.springframework.orm.hibernate4.LocalSessionFactoryBuilder;
    import org.springframework.transaction.annotation.EnableTransactionManagement;


    import com.niit.shoppingcart.dao.CategoryDAO;
    import com.niit.shoppingcart.dao.CategoryDAOImpl;
    import com.niit.shoppingcart.model.Category;
    import com.niit.shoppingcart.model.Product;
    import com.niit.shoppingcart.model.Supplier;
    import com.niit.shoppingcart.model.UserDetails;


    @Configuration
    @ComponentScan("com.niit.shoppingcart")
    @EnableTransactionManagement
    public class ApplicationContextConfig {

        @Bean(name = "dataSource")
        public DataSource getDataSource() {
            BasicDataSource dataSource = new BasicDataSource();
            dataSource.setDriverClassName("org.h2.Driver");
            dataSource.setUrl("jdbc:h2:tcp://localhost/~/test");
            dataSource.setUsername("sa");
            dataSource.setPassword("");

            return dataSource;
        }


        private Properties getHibernateProperties() {
            Properties properties = new Properties();
            properties.put("hibernate.hbm2ddl.auto","update");
            properties.put("hibernate.show_sql", "true");
            properties.put("hibernate.dialect", "org.hibernate.dialect.MySQLDialect");
            return properties;
        }

        @Autowired
        @Bean(name = "sessionFactory")
        public SessionFactory getSessionFactory(DataSource dataSource) {
            LocalSessionFactoryBuilder sessionBuilder = new LocalSessionFactoryBuilder(dataSource);
            sessionBuilder.addProperties(getHibernateProperties());
            sessionBuilder.addAnnotatedClasses(Category.class);
            sessionBuilder.addAnnotatedClasses(Supplier.class);
            sessionBuilder.addAnnotatedClasses(UserDetails.class);
            sessionBuilder.addAnnotatedClasses(Product.class);
            return sessionBuilder.buildSessionFactory();
        }

        @Autowired
        @Bean(name = "transactionManager")
        public HibernateTransactionManager getTransactionManager(
                SessionFactory sessionFactory) {
            HibernateTransactionManager transactionManager = new HibernateTransactionManager(
                    sessionFactory);

            return transactionManager;
        }

        @Autowired
        @Bean(name = "categoryDAO")
        public CategoryDAO getCategorDAO(SessionFactory sessionFactory) {
            return new CategoryDAOImpl(sessionFactory);
        }
    }
package com.niit.shoppingcart;

import org.springframework.context.annotation.AnnotationConfigApplicationContext;

import com.niit.shoppingcart.dao.CategoryDAO;
import com.niit.shoppingcart.model.Category;

public class CategoryTest {

    public static void main(String[] args) {
        AnnotationConfigApplicationContext context=new AnnotationConfigApplicationContext();
        context.scan("com.niit.shoppingcart");
        context.refresh();
        CategoryDAO categoryDAO = (CategoryDAO) context.getBean("categoryDAO");

        Category category = (Category) context.getBean("category");

        category.setC_id("cg1234");
        category.setC_name("phone");
        category.setC_desc("This is the first category");

        if (categoryDAO.save(category) == true) {
            System.out.println("Category created");
        } else {
            System.out.println("Unable to create category");
        }
    }
}
@SpringBootApplication
public class TestApplication {

    public static void main(String[] args) {
        SpringApplication.run(TestApplication.class, args);
    }

    @Component
    public class CategoryTest implements ApplicationRunner {
        private CategoryDAO categoryDAO;

        // Spring Boot 1.4 autowires on constructors automatically
        public CategoryTest(CategoryDAO categoryDAO) {
            this.categoryDAO= categoryDAO;
        }

        public void run(String[] args) {
            // This doesn't need to be a bean as it is just a pojo state object
            Category category = new Category();
            category.setC_id("cg1234");
            category.setC_name("phone");
            category.setC_desc("This is the first category");

            if (categoryDAO.save(category) == true) {
                System.out.println("Category created");
            } else {
                System.out.println("Unable to create category");
            }
        }
    }
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class CategoryTest {
    @Autowired
    private CategoryDAO categoryDAO;

    @Test
    public testSave() {
        Category category = new Category();
        category.setC_id("cg1234");
        category.setC_name("phone");
        category.setC_desc("This is the first category");

        assertThat(categoryDAO.save(category)).isTrue();
    }
}