2013-03-20 176 views
0

我是Hibernate和Spring的新手,在执行应用程序时出现上述异常。
HTTP状态500 - 请求处理失败;嵌套异常是org.hibernate.HibernateException:/hibernate.cfg.xml未找到

我想从数据库中提取记录的值。

下面是我收到的例外: -

message Request processing failed; nested exception is org.hibernate.HibernateException: /hibernate.cfg.xml not found 

description The server encountered an internal error that prevented it from fulfilling this request. 

exception 

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is org.hibernate.HibernateException: /hibernate.cfg.xml not found 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:894) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
root cause 

org.hibernate.HibernateException: /hibernate.cfg.xml not found 
    org.hibernate.util.ConfigHelper.getResourceAsStream(ConfigHelper.java:170) 
    org.hibernate.cfg.Configuration.getConfigurationInputStream(Configuration.java:1497) 
    org.hibernate.cfg.Configuration.configure(Configuration.java:1519) 
    org.hibernate.cfg.Configuration.configure(Configuration.java:1506) 
    com.me.app.HomeController.handleRequestInternal(HomeController.java:56) 
    org.springframework.web.servlet.mvc.AbstractController.handleRequest(AbstractController.java:153) 
    org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
    org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
    org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
    org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
    javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs. 

以下是我的文件: -

POJO

public class Usertable { 

    int id; 
    String userName; 
    String password; 



    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getUserName() { 
     return userName; 
    } 
    public void setUserName(String userName) { 
     this.userName = userName; 
    } 
    public String getPassword() { 
     return password; 
    } 
    public void setPassword(String password) { 
     this.password = password; 
    } 



} 


控制器

//@Controller 
public class HomeController extends AbstractController{ 

    //private static final Logger logger = LoggerFactory.getLogger(HomeController.class); 

    /** 
    * Simply selects the home view to render by returning its name. 
    */ 
// @RequestMapping(value = "/", method = RequestMethod.GET) 
// public String home(Locale locale, Model model) { 
//  logger.info("Welcome home! The client locale is {}.", locale); 
//  
//  Date date = new Date(); 
//  DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale); 
//  
//  String formattedDate = dateFormat.format(date); 
//  
//  model.addAttribute("serverTime", formattedDate); 
//  
//  return "home"; 
// } 

    @Override 
    protected ModelAndView handleRequestInternal(HttpServletRequest request, 
      HttpServletResponse response) throws Exception { 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 
     Usertable user; 

     Configuration cfg = new Configuration(); 
     SessionFactory sf = cfg.configure().buildSessionFactory(); 
     Session hibsession = sf.openSession(); 





     Transaction tx = hibsession.beginTransaction(); 
     user = (Usertable)hibsession.get(Usertable.class, userName); 

     System.out.println("UserName is "+ user.getUserName()); 
     System.out.println("Password is "+ user.getPassword()); 


     tx.commit(); 



     hibsession.close(); 

     return new ModelAndView("first","abc","abc"); 
    } 


的hibernate.cfg.xml

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE hibernate-configuration PUBLIC 
     "-//Hibernate/Hibernate Configuration DTD 3.0//EN" 
     "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd"> 
<hibernate-configuration> 
    <session-factory> 
     <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> 
     <property name="hibernate.connection.password">tiger</property> 
     <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/contacts</property> 
     <property name="hibernate.connection.username">root</property> 

     <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property> 

     <mapping resource="Usertable.hbm.xml"/> 
    </session-factory> 
</hibernate-configuration> 


Usertable.hbm.xml

<?xml version="1.0"?> 
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" 
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"> 
<!-- Generated 20 Mar, 2013 4:26:30 AM by Hibernate Tools 3.4.0.CR1 --> 
<hibernate-mapping> 
    <class name="com.me.app.Usertable" table="USERTABLE"> 
     <id name="id" type="java.lang.Integer"> 
      <column name="UserID" /> 
      <generator class="native" /> 
     </id> 
     <property name="userName" type="java.lang.String"> 
      <column name="UserName" /> 
     </property> 
     <property name="password" type="java.lang.String"> 
      <column name="UserPassword" /> 
     </property> 
    </class> 
</hibernate-mapping> 


的servlet-context.xml的

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

    <!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure --> 
    <!-- Enables the Spring MVC @Controller programming model --> 
    <annotation-driven /> 
    <!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory --> 
    <!-- <resources mapping="/resources/**" location="/resources/" /> --> 

    <beans:bean id="urlMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping" /> 

    <beans:bean name="/books.htm" class="com.me.app.HomeController" /> 




    <!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory --> 
    <beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> 
     <beans:property name="prefix" value="/WEB-INF/views/" /> 
     <beans:property name="suffix" value=".jsp" /> 
    </beans:bean> 

    <context:component-scan base-package="com.me.app" /> 



</beans:beans> 


请帮我这个issue.Thanks提前!

+0

您的hibernate.cfg.xml文件位于您的项目中? – kyiu 2013-03-20 10:35:40

+0

它位于src/main/java/com/me/app/hibernate.cfg.xml – quickBongo 2013-03-20 10:37:10

+1

所以你的项目是基于Maven的?尝试把你的配置文件放入src/main/resources – kyiu 2013-03-20 10:43:18

回答

0

问题是你不应该在请求的句柄中实例化你的hibernate配置,而是让spring实例化你的session factory并将它注入你的控制器并从那里检索会话。这样做,那么您将不必为每个向应用程序提出的请求实施会话工厂。

您可以查看这question或官方文档,以获得有关如何通过弹簧实例化会话工厂的详细信息。

这将(间接)解决您的问题。

+0

谢谢benzonico我一定会尝试注入会话工厂到我的代码。感谢您的宝贵意见。 – quickBongo 2013-03-20 11:00:09

0

benzonico and KHY感谢您的意见。我做的第一个错误是我将src/main/java/com/me/app /中的hibernate.cfg.xml放在了src/main/java /目录下。这对我有效。关于TypedMismatch接下来的部分是

user = (Usertable)hibsession.get(Usertable.class, userName); 

我试图摆脱这实际上是整型数据库中的String引用。这样就解决了typedMismatchException。

我肯定会尝试通过弹簧将会话工厂注入到我的代码中。由于我是这个框架的新手,我在与您讨论并尝试新代码时学到了一些负载。

再次感谢您的宝贵意见。

相关问题