【问题标题】:Convert Spring LocalSessionFactoryBean to Hibernate SessionFactory将 Spring LocalSessionFactoryBean 转换为 Hibernate SessionFactory
【发布时间】:2014-08-09 03:04:35
【问题描述】:

我正在尝试将 Spring 与 Hibernate 集成。但是,我无法通过 Spring 的 LocalSessionFactoryBean 获取 Hibernate 的 SessionFactory 对象。

我尝试了以下方法:

1) 使用 org.springframework.orm.hibernate3 和 org.springframework.orm.hibernate4 LocalSessionFactoryBean 类中的任何一个

2) 使用 AbstractSessionFactoryBean 类

3) 尝试使用 SessionFactory=LocalSessionFactoryBean.getObject() 以及 SessionFactory=LocalSessionFactoryBean

这是项目结构:

Not allowed to post images till I reach 10 credits, sad..

这里是 BookService

    package com.zzz.service;

    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.orm.hibernate3.AbstractSessionFactoryBean;
    import org.springframework.orm.hibernate4.LocalSessionFactoryBean;

    import com.zzz.forms.BookForm;

    public class BookService {

       @Autowired
       LocalSessionFactoryBean hibernateSessionFactory;

       SessionFactory sessionFactory;

        public LocalSessionFactoryBean getHibernateSessionFactory() {
            return hibernateSessionFactory;
        }
        public void setHibernateSessionFactory(LocalSessionFactoryBean hibernateSessionFactory) {
            this.hibernateSessionFactory = hibernateSessionFactory;
        }





        public SessionFactory getSessionFactory() {
            return sessionFactory;
        }
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
        }
        public  void  storeBookDetails(BookForm bookForm){

            System.out.println("Hibernae");
            setSessionFactory((SessionFactory)hibernateSessionFactory.getObject());

            Session session=sessionFactory.openSession();

            session.beginTransaction();
            session.save(bookForm);
            session.getTransaction().commit();
            session.close();



            System.out.println("Hibernae");
        }




    }

这是导致此服务的控制器

    package com.zzz.controllers;

    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.ModelAttribute;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.servlet.ModelAndView;

    import com.zzz.forms.BookForm;
    import com.zzz.service.BookService;

    @Controller
    public class FirstPageController {


        BookService bookService;


        public BookService getBookService() {
            return  new BookService();
        }

        public void setBookService(BookService bookService) {
            this.bookService = bookService;
        }

        @RequestMapping(value="/firstPage")
        public ModelAndView showFirstPage()
        {

            return new ModelAndView("books/Book","BookForm",new BookForm());

        }

        @RequestMapping(value="/enterBookDetails")
        public ModelAndView enterBookDetails(@ModelAttribute("BookForm") BookForm bookForm)
        {

            getBookService().storeBookDetails(bookForm);

            System.out.println("BOOK DETAILS ARE AS FOLLOWWS");
            System.out.println(bookForm.getBookId());
            System.out.println(bookForm.getBookName());


            return  new ModelAndView("books/BookSubmitted","BookForm",bookForm);

        }


    }

应用上下文:

    <?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"
            xmlns:hz="http://www.hazelcast.com/schema/spring"
            xsi:schemaLocation="http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
             http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
            http://www.springframework.org/schema/context
            http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.hazelcast.com/schema/spring
            http://www.hazelcast.com/schema/spring/hazelcast-spring-3.2.xsd">


            <context:annotation-config/>
            <context:component-scan base-package="com.zzz.controllers"></context:component-scan>
            <mvc:annotation-driven/>



            <bean id="myDataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
                <property name="driverClassName" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost/zz" />
                <property name="username" value="root" />
                <property name="password" value="root" />
            </bean>

            <bean id="hibernateSessionFactory"
                class="org.springframework.orm.hibernate4.LocalSessionFactoryBean" >
                <property name="dataSource" ref="myDataSource" />
                <property name="packagesToScan" value="com.zzz.forms"/>

                <property name="hibernateProperties">
                    <value>
                        hibernate.dialect=org.hibernate.dialect.MySQL5Dialect
                    </value>
                </property>
            </bean>
            </beans>

还有网络 XML

        <?xml version="1.0" encoding="UTF-8"?>
        <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
          <display-name>ZZZ</display-name>


          <welcome-file-list>
            <welcome-file>index.jsp</welcome-file>
          </welcome-file-list>


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

          <servlet-mapping>
            <servlet-name>dispatcher</servlet-name>
            <url-pattern>*.htm</url-pattern>
          </servlet-mapping>

            <listener>
                <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
            </listener>
            <context-param>
                <param-name>contextConfigLocation</param-name>
                <param-value>classpath:ApplicationContext.xml</param-value>
            </context-param>

        </web-app>

NullPointer 看起来像这样

org.springframework.web.util.NestedServletException: Request processing failed; nested exception is java.lang.NullPointerException
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:641)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause

java.lang.NullPointerException
com.zzz.service.BookService.storeBookDetails(BookService.java:38)
com.zzz.controllers.FirstPageController.enterBookDetails(FirstPageController.java:39)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)

似乎 LocalSessionFactoryBean 没有被注入,但我不知道原因。 任何形式的帮助将不胜感激。

【问题讨论】:

    标签: spring hibernate spring-mvc integration


    【解决方案1】:

    NPE 与您的休眠设置无关。在您的控制器中,您在 getBookService() 方法中使用 new BookService() 创建一个新的图书服务。这是不正确的。您需要在 spring 配置中为 book 服务定义一个 bean,将该 bean 注入您的控制器(直接或使用注释)并在控制器中使用该 bean。您已经定义了一个 BookService 属性,所以就快到了。

    【讨论】:

    • 谢谢,就是这样!
    猜你喜欢
    • 2015-09-26
    • 2016-06-06
    • 2011-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-08
    • 2015-06-10
    • 1970-01-01
    相关资源
    最近更新 更多