Весной пытаюсь создать электронную коммерцию. После включения базы данных «Hibernate» и «H2» в мой проект я получаю сообщение об ошибке. Ошибка приведена ниже. Я очень стараюсь, но не нашел решения.
Ошибка:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'homeController': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private com.home.dao.ProductDao com.home.controller.homeController.productDao; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'productDaoImpl': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: private org.hibernate.SessionFactory com.home.dao.impl.ProductDaoImpl.sessionFactory; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Invocation of init method failed; nested exception is org.hibernate.exception.GenericJDBCException: Unable to open JDBC Connection for DDL execution
applicationContext.xml
<bean id = "dataSource"
class = "org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name = "driverClassName" value = "org.h2.Driver" />
<property name = "url" value = "jdbc:h2:~/test" />
<property name = "username" value = "sa" />
<property name = "password" value = "" />
</bean>
<bean id = "sessionFactory"
class = "org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name = "dataSource" ref = "dataSource"></property>
<property name = "hibernateProperties">
<props>
<prop key = "hibernate.dialect">org.hibernate.dialect.H2Dialect</prop>
<prop key = "hibernate.hbm2ddl.auto">update</prop>
<prop key = "hibernate.show_sql">true</prop>
<prop key = "hibernate.format_sql">true</prop>
</props>
</property>
<property name = "packagesToScan">
<list>
<value>com.home</value>
</list>
</property>
</bean>
<bean id = "transactionManager"
class = "org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name = "sessionFactory" ref = "sessionFactory" />
</bean>
home-servlet.xml
<context:component-scan base-package = "com.home">
<context:include-filter type = "aspectj" expression = "com.home.*" />
</context:component-scan>
<mvc:annotation-driven />
<bean
class = "org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name = "prefix">
<value>/WEB-INF/</value>
</property>
<property name = "suffix">
<value>.jsp</value>
</property>
</bean>
<mvc:resources mapping = "/resources/**"
location = "/WEB-INF/resources/" cache-period = "31556926" />
<tx:annotation-driven />
web.xml
<display-name>Archetype Created Web Application</display-name>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/home-servlet.xml,
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<servlet>
<servlet-name>home</servlet-name>
<servlet-class>
org.springframework.web.servlet.DispatcherServlet
</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>home</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
homeController.java
@Controller
@Configuration
public class homeController {
@Autowired
private ProductDao productDao;
@RequestMapping("/")
public String home() {
return "views/home";
}
@RequestMapping("/productList")
public String getProducts(Model model) {
List<Product> products = productDao.getAllProducts();
model.addAttribute("products", products);
return "views/productList";
}
@RequestMapping("/productList/viewProduct/{productId}")
public String viewProduct(@PathVariable String productId, Model model) throws IOException{
Product product = productDao.getProductById(productId);
model.addAttribute(product);
return "views/viewProduct";
}
}
ProductDaoImpl.java
@Repository
@Transactional
public class ProductDaoImpl implements ProductDao {
@Autowired
private SessionFactory sessionFactory;
public void addProduct(Product product) {
Session session = sessionFactory.getCurrentSession();
session.saveOrUpdate(product);
session.flush();
}
public Product getProductById(String id) {
Session session = sessionFactory.getCurrentSession();
Product product = (Product) session.get(Product.class, id);
session.flush();
return product;
}
public List<Product> getAllProducts() {
Session session = sessionFactory.getCurrentSession();
Query query = session.createQuery("from Product");
List<Product> products = query.list();
session.flush();
return products;
}
public void deleteProduct (String id) {
Session session = sessionFactory.getCurrentSession();
session.delete(getProductById(id));
session.flush();
}
}
Код Product.java:
@Entity
public class Product {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private String productId;
private String productName;
private String productCategory;
private String productDescription;
private double productPrice;
private String productCondition;
private String productStatus;
private int unitInStock;
private String productManufacturer;
public String getProductId() {
return productId;
}
public void setProductId(String productId) {
this.productId = productId;
}
public String getProductName() {
return productName;
}
public void setProductName(String productName) {
this.productName = productName;
}
public String getProductCategory() {
return productCategory;
}
public void setProductCategory(String productCategory) {
this.productCategory = productCategory;
}
public String getProductDescription() {
return productDescription;
}
public void setProductDescription(String productDescription) {
this.productDescription = productDescription;
}
public double getProductPrice() {
return productPrice;
}
public void setProductPrice(double productPrice) {
this.productPrice = productPrice;
}
public String getProductCondition() {
return productCondition;
}
public void setProductCondition(String productCondition) {
this.productCondition = productCondition;
}
public String getProductStatus() {
return productStatus;
}
public void setProductStatus(String productStatus) {
this.productStatus = productStatus;
}
public int getUnitInStock() {
return unitInStock;
}
public void setUnitInStock(int unitInStock) {
this.unitInStock = unitInStock;
}
public String getProductManufacturer() {
return productManufacturer;
}
public void setProductManufacturer(String productManufacturer) {
this.productManufacturer = productManufacturer;
}
}
Код ProductDao.java: public interface ProductDao {
void addProduct(Product product);
Product getProductById(String id);
List<Product> getAllProducts();
void deleteProduct(String id);
}
Структура проекта или изображение каталога:Структура проекта или каталог в моей Eclipse Oxygen IDE
#Nicholas K, пожалуйста, просмотрите сообщение об обновлении, где я добавил код ProductDao .java и проверил изображение структуры каталогов моего проекта. Танки за ваш комментарий.




ProductDao не фасоль .. Вот почему. Репозиторий, контроллер, служба - все это типы bean-компонентов. Убедитесь, что это именно этот тип фасоли ..... Спасибо.
Наконец, я обнаружил свои собственные проблемы, когда использую IntelliJ IDEA IDE. Проблемы приведены ниже:
Моя проблема возникла в файле pom.xml. Здесь я использовал зависимость последней версии спящий режим (5.4.0.Финал), которая не поддерживает пакет import org.hibernate.Query;, а также не поддерживает коды Запрос query = session.createQuery ("из продукта"); и Продукт product = (Продукт) session.get (Product.class, id); в классе ProductDaoImpl.java.
Я также использовал последнюю версию зависимостей весна-webmvc, пружинный стержень и весна-орм в файле pom.xml. Из-за этого возникает конфликт версий.
Решение:
Забудьте об Eclipse и избегайте его. Пожалуйста, используйте IntelliJ IDEA. Это очень удобная IDE для среды Java Spring MVC, которая также показывает, что вы делаете не так.
Создать новый проект и использовать зависимость версии спящий режим ядра 4.0.1.Финал в файле pom.xml, а также использовать собственную версию 4.2.8.РЕЛИЗ, зависимости пружинный стержень и весна-орм.
Спасибо :)
Можете ли вы поделиться структурой каталогов и
ProductDao?