2016-07-26 147 views
0

我經常會遇到下面的例外情況,試着在這裏給出所有可能的答案,這就是爲什麼再次發佈這個問題。spring mvc,maven,hibernate java.lang.ClassNotFoundException:com.entity.Candidate

SEVERE: Exception sending context initialized event to listener instance of class org.springframework.web.context.ContextLoaderListener 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'transactionManager' defined in ServletContext resource [/WEB-INF/conceptedge-persistence.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/conceptedge-persistence.xml]: Error converting typed String value for bean property 'annotatedClasses' with key [0]; nested exception is org.springframework.beans.TypeMismatchException: Failed to convert value of type 'java.lang.String' to required type 'java.lang.Class'; nested exception is java.lang.IllegalArgumentException: Cannot find class [com.entity.Candidate] 

的web.xml

<?xml version="1.0" encoding="UTF-8"?> 

<web-app version="3.0" 
     xmlns="http://java.sun.com/xml/ns/javaee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
     metadata-complete="false"> 


     <servlet> 
      <servlet-name>conceptedge</servlet-name> 
      <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
      <load-on-startup>1</load-on-startup> 
     </servlet> 

     <listener> 
      <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
     </listener> 

     <context-param> 
      <param-name>contextConfigLocation</param-name> 
      <param-value>/WEB-INF/conceptedge-persistence.xml</param-value> 
     </context-param> 

     <servlet-mapping> 
      <servlet-name>conceptedge</servlet-name> 
      <url-pattern>/</url-pattern> 
     </servlet-mapping> 

</web-app> 

-servlet.xml後綴

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:mvc="http://www.springframework.org/schema/mvc" 
    xsi:schemaLocation="http://www.springframework.org/schema/mvc 
http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd 
http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/context 
http://www.springframework.org/schema/context/spring-context-3.0.xsd"> 

    <context:component-scan base-package="com.entity.Candidate" > 
     <context:include-filter type="regex" expression="com.entity.Candidate"/> 
    </context:component-scan> 
    <mvc:annotation-driven /> 

    <bean 
     class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <property name="prefix" value="/WEB-INF/views/" /> 
     <property name="suffix" value=".jsp" /> 
    </bean> 
</beans> 

-persistence.xml

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:tx="http://www.springframework.org/schema/tx" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans  
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx.xsd"> 

    <tx:annotation-driven transaction-manager="transactionManager"/> 

    <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> 
     <property name="sessionFactory" ref="sessionFactory"/> 
    </bean> 

<!-- <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> --> 
<!--   <property name="dataSource" ref="dataSource"></property> --> 
<!--   <property name="configLocation" value="/WEB-INF/hibernate.cfg.xml"></property> --> 
<!-- </bean> --> 
    <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> 
     <!-- class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" --> 
     <property name="dataSource" ref="dataSource" /> 

     <property name="annotatedClasses"> 
     <list> 
      <value type="java.lang.Class">com.entity.Candidate</value> 
     </list> 
     </property> 
     <property name="hibernateProperties"> 
      <props> 
       <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop> 
       <prop key="hibernate.show_sql">true</prop> 
       <prop key="hibernate.hbm2ddl.auto">update</prop> 
       <prop key="javax.persistence.validation.mode">none</prop> 
      </props> 
     </property> 
    </bean> 
    <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <property name="driverClassName" value="com.mysql.jdbc.Driver"></property> 
     <property name="url" value="jdbc:mysql://localhost:3306/interview"></property> 
     <property name="username" value="root"></property> 
     <property name="password" value="root"></property> 
    </bean> 

    </beans> 

控制器類

package com.controller; 

import java.util.List; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.ModelMap; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 

import com.entity.Candidate; 
import com.service.ConceptEdgeServices; 

@Controller 
public class ConceptEdge { 

    @Autowired 
    ConceptEdgeServices services; 

    @RequestMapping(value="/hi", method=RequestMethod.GET) 
    public String displayHello(ModelMap model){ 

     List<Candidate> candidatesList = services.getCandidatesList(); 
     model.put("candidateslist", candidatesList); 
     return "hi"; 
    } 

    @RequestMapping(method=RequestMethod.GET) 
    public String welcome(){ 
     return "hello"; 
    } 

} 

daoimpl.java

package com.daoimpl; 

import java.util.List; 

import org.hibernate.Criteria; 
import org.hibernate.Session; 
import org.hibernate.SessionFactory; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Repository; 
import org.springframework.transaction.annotation.Transactional; 

import com.dao.ConceptEdgeDao; 
import com.entity.Candidate; 

@Repository 
@Transactional 
public class ConceptEdgeDaoImpl implements ConceptEdgeDao{ 

    @Autowired 
    SessionFactory sessionFactory; 

    @Override 
    public List<Candidate> getCandidatesList() { 
     // TODO Auto-generated method stub 
     Session session = sessionFactory.getCurrentSession(); 
     Criteria criteria = session.createCriteria(Candidate.class); 
     return criteria.list(); 
    } 

} 

file structure followed:

遭遇以下錯誤不斷:

引起:拋出java.lang.ClassNotFoundException:com.entity.Candidate

通過Hibernat e我可以用適當的列名和數據類型創建名爲Candidate的表。但是當我試圖加載Tomcat 7時,我正面臨着這個錯誤。

pom.xml 我在這裏發佈我的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/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>conceptinfo</groupId> 
    <artifactId>conceptinfo</artifactId> 
    <packaging>war</packaging> 
    <version>1.0</version> 
    <name>conceptinfo</name> 
    <repositories> 
     <repository> 
      <id>eap</id> 
      <url>http://maven.repository.redhat.com/techpreview/all</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </repository> 
    </repositories> 
    <pluginRepositories> 
     <pluginRepository> 
      <id>eap</id> 
      <url>http://maven.repository.redhat.com/techpreview/all</url> 
      <releases> 
       <enabled>true</enabled> 
      </releases> 
      <snapshots> 
       <enabled>true</enabled> 
      </snapshots> 
     </pluginRepository> 
    </pluginRepositories> 
    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
     <maven.compiler.source>1.6</maven.compiler.source> 
     <maven.compiler.target>1.6</maven.compiler.target> 
    </properties> 
    <dependencies> 
     <dependency> 
      <groupId>mysql</groupId> 
      <artifactId>mysql-connector-java</artifactId> 
      <version>5.1.9</version> 
     </dependency>  
     <dependency> 
      <groupId>javax.servlet</groupId> 
      <artifactId>javax.servlet-api</artifactId> 
      <version>3.0.1</version> 
      <scope>provided</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-core</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-context-support</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-tx</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-web</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-webmvc</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.11</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-commons-annotations</artifactId> 
      <version>3.2.0.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>javax.transaction</groupId> 
      <artifactId>jta</artifactId> 
      <version>1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>jstl</groupId> 
      <artifactId>jstl</artifactId> 
      <version>1.2</version> 
     </dependency> 
     <dependency> 
      <groupId>antlr</groupId> 
      <artifactId>antlr</artifactId> 
      <version>2.7.7</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate</groupId> 
      <artifactId>hibernate-core</artifactId> 
      <version>4.0.1.Final</version> 
     </dependency> 
     <dependency> 
      <groupId>org.hibernate.javax.persistence</groupId> 
      <artifactId>hibernate-jpa-2.1-api</artifactId> 
      <version>1.0.0.Draft-16</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-orm</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-beans</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-jdbc</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-expression</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework</groupId> 
      <artifactId>spring-aop</artifactId> 
      <version>3.2.5.RELEASE</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-logging</groupId> 
      <artifactId>commons-logging</artifactId> 
      <version>1.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>dom4j</groupId> 
      <artifactId>dom4j</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>log4j</groupId> 
      <artifactId>log4j</artifactId> 
      <version>1.2.17</version> 
     </dependency> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-api</artifactId> 
      <version>1.6.1</version> 
     </dependency> 
     <dependency> 
      <groupId>cglib</groupId> 
      <artifactId>cglib</artifactId> 
      <version>2.1_3</version> 
     </dependency> 

     <dependency> 
      <groupId>javassist</groupId> 
      <artifactId>javassist</artifactId> 
      <version>3.12.1.GA</version> 
     </dependency> 
     <dependency> 
      <groupId>org.jboss.logging</groupId> 
      <artifactId>jboss-logging</artifactId> 
      <version>3.1.1.GA</version> 
     </dependency> 

     <dependency> 
      <groupId>commons-collections</groupId> 
      <artifactId>commons-collections</artifactId> 
      <version>2.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-dbcp</groupId> 
      <artifactId>commons-dbcp</artifactId> 
      <version>1.4</version> 
     </dependency> 
     <dependency> 
      <groupId>commons-lang</groupId> 
      <artifactId>commons-lang</artifactId> 
      <version>2.5</version> 
     </dependency> 
     <dependency> 
      <groupId>taglibs</groupId> 
      <artifactId>standard</artifactId> 
      <version>1.1.2</version> 
     </dependency> 
    </dependencies> 
    <profiles> 
     <profile> 
      <id>openshift</id> 
      <build> 
       <finalName>conceptinfo</finalName> 
       <plugins> 
        <plugin> 
         <artifactId>maven-war-plugin</artifactId> 
         <version>2.1.1</version> 
         <configuration> 
          <outputDirectory>webapps</outputDirectory> 
          <warName>ROOT</warName> 
         </configuration> 
        </plugin> 
       </plugins> 
      </build> 
     </profile> 
    </profiles> 
</project> 

candidate.java

package com.entity; 

import javax.persistence.Entity; 
import javax.persistence.GeneratedValue; 
import javax.persistence.GenerationType; 
import javax.persistence.Id; 

import org.hibernate.annotations.GenericGenerator; 

@Entity 
public class Candidate { 

    @Id 
    @GeneratedValue(strategy=GenerationType.AUTO) 
    @GenericGenerator(name = "system-uuid", strategy = "uuid") 
    private int number; 
    private String name; 

    public int getNumber() { 
     return number; 
    } 
    public void setNumber(int number) { 
     this.number = number; 
    } 
    public String getName() { 
     return name; 
    } 
    public void setName(String name) { 
     this.name = name; 
    } 
} 
+0

請顯示您的pom.xml或將持久性Jar文件添加到您的BuildPath。 –

+0

「'annotatedClasses'with key [0];嵌套異常是org.springframework.beans.TypeMismatchException:未能將類型'java.lang.String'的值轉換爲所需類型'java.lang.Class';」是一個堅實的暗示,不是嗎? – 2016-07-27 05:45:35

+0

請發佈候選實體類。 – mady

回答

1
<list> 
    <value>com.entity.Candidate</value> 
</list> 

你能僅僅通過刪除類型嘗試。似乎它期望的類型作爲字符串,因爲你試圖將它轉換爲類。

+0

謝謝你的回覆,是的,我嘗試不給type =「」,但仍然拋出同樣的錯誤! 我不明白爲什麼這個特定的錯誤即將到來,你能解釋我嗎? ----「無法將類型'java.util.ArrayList'的屬性值轉換爲屬性'annotatedClasses'所需的類型'java.lang.Class []'」 –

+0

我認爲它應該起作用。以下鏈接以及相同的狀態。 http://stackoverflow.com/questions/4509743/class-not-found-exception,http://stackoverflow.com/questions/1532043/spring-a-bean-that-receives-a-list-of-classes。我可以說的是你可以清理和重建項目並看看。有時緩存可能會導致一些問題? –

+0

這就是我想知道的!我已經嘗試了這裏給出的所有答案。可能是我在其他地方做錯了,它反映了這個錯誤!請嘗試糾正。 –