Java 在Spring Core Maven项目中将Hibernate与H2数据库一起使用时出现未满足的Pendency异常
上下文初始化期间遇到异常-正在取消 刷新尝试: 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.getSingJava 在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
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();
}
}