集成了spring 3,hibernate 3,maven和mysql

我在applicationContext.xml中尝试了不同的sessionFactory。 它有同样的问题。 任何建议都会得到提升! applicationContext.xml中

                              ${jdbc.dialect}   ${hibernate.show_sql}   ${hibernate.format_sql}     

这是pom.xml。

  4.0.0 org.peterhuang myweb war 0.0.1-SNAPSHOT myweb Maven Webapp http://maven.apache.org    junit junit 3.8.1 test    org.springframework spring-core 3.2.4.RELEASE   org.springframework spring-webmvc 3.2.4.RELEASE   org.springframework spring-context 3.2.4.RELEASE   org.springframework spring-orm 3.2.4.RELEASE   org.springframework spring-hibernate3 2.0.8   org.springframework spring-tx 3.2.4.RELEASE    org.hibernate hibernate-core 4.2.6.Final    jstl jstl 1.2    javax.transaction jta 1.1    mysql mysql-connector-java 5.1.26    myweb  

这是错误的轨道。 我在eclipse中运行它,在tomcat 7服务器上

 SEVERE: Context initialization failed org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Cannot resolve reference to bean 'sessionFactory' while setting bean property 'sessionFactory'; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Error setting property values; nested exception is org.springframework.beans.NotWritablePropertyException: Invalid property 'packagesToScan' of bean class [org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean]: Bean property 'packagesToScan' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter? at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveReference(BeanDefinitionValueResolver.java:329) at org.springframework.beans.factory.support.BeanDefinitionValueResolver.resolveValueIfNecessary(BeanDefinitionValueResolver.java:107) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.applyPropertyValues(AbstractAutowireCapableBeanFactory.java:1387) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1128) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:519) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:458) at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:295) 

CategoryDAOImpl

 package org.peterhuang.myweb.dao.impl; import java.util.List; import org.hibernate.SessionFactory; import org.peterhuang.myweb.dao.CategoryDAO; import org.peterhuang.myweb.model.Category; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; @Repository(value = "categoryDAO") public class CategoryDAOImpl implements CategoryDAO { @Autowired private SessionFactory sessionFactory; @SuppressWarnings("unchecked") public List getCategoryList() { // TODO Auto-generated method stub return (List) sessionFactory.openSession() .getNamedQuery("findAllCategory").list(); } public SessionFactory getSessionFactory() { return sessionFactory; } public void setSessionFactory(SessionFactory sessionFactory) { this.sessionFactory = sessionFactory; } } 

CategoryDAO

 package org.peterhuang.myweb.dao; import java.util.List; import org.springframework.stereotype.Service; import org.peterhuang.myweb.model.*; @Service public interface CategoryDAO { public List getCategoryList(); } 

Category.java

 package org.peterhuang.myweb.model; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.Table; @NamedQueries({ @NamedQuery(name = "findAllCategory", query = "from CATEGORY s ") }) @Entity @Table(name = "CATEGORY") public class Category { @Id @Column(name = "CATEGORY_ID") @GeneratedValue private int id; @Column(name = "CATEGORY_NAME") private String categoryName; public Category() { } public int getId() { return id; } public void setId(int id) { this.id = id; } public String getCategoryName() { return categoryName; } public void setCategoryName(String categoryName) { this.categoryName = categoryName; } } 

PageController.java

 package org.peterhuang.myweb.web; import java.util.List; import javax.annotation.Resource; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import org.peterhuang.myweb.dao.impl.CategoryDAOImpl; import org.peterhuang.myweb.model.Category; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; @Controller public class PageController { @Resource private CategoryDAOImpl categoryDAOImpl; @RequestMapping(value = "/mainpage") public String mainPage(Model model, HttpServletRequest request, HttpServletResponse response) { HttpSession session = request.getSession(); List categoryList = categoryDAOImpl.getCategoryList(); System.out.println(categoryList); session.setAttribute("categoryList", categoryList); return "mainpage"; } } 

web.xml中

   my web  dispatcher org.springframework.web.servlet.DispatcherServlet  contextConfigLocation /WEB-INF/applicationContext.xml  1   dispatcher /*   org.springframework.web.context.ContextLoaderListener   /index.jsp  

你有JAR地狱的情况。

无论出于何种原因,这种依赖

  org.springframework spring-hibernate3 2.0.8  

其中有一个org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean类隐藏了org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean类,即。 同名,在此依赖项中

  org.springframework spring-orm 3.2.4.RELEASE  

并且该类没有setPackagesToScan方法。 摆脱spring-hibernate3依赖。 spring-orm应该绰绰有余。 您可以在此处下载源代码并自行检查。

我认为问题是属性packagesToScan占用String array而不是简单的String 。 尝试更改属性:

   org.peterhuang.myweb