【问题标题】:SpringMVC my SessionFactory in DAOimp doesn't workSpringMVC 我在 DAOimp 中的 SessionFactory 不起作用
【发布时间】:2017-06-10 00:19:32
【问题描述】:

我的 servlet 中有这个:

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

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
    <property name="driverClassName" value="com.mysql.jdbc.Driver" />
    <property name="url" value="jdbc:mysql://localhost:3306/test" />
    <property name="username" value="root" />
    <property name="password" value="12345" />
</bean>

<bean id="sessionFactory"
      class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="packagesToScan" value="com.tricas.models" />
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.enable_lazy_load_no_trans">true</prop>
            <prop key="hibernate.default_schema">test</prop>
            <prop key="format_sql">true</prop>
            <prop key="use_sql_comments">true</prop>
            <!--<prop key="hibernate.hbm2ddl.auto">create</prop> -->
        </props>
    </property>
</bean>

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

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

还有我的 DaoImp

@Repository
@Transactional
public class UserDaoImp implements UserDao {

@Autowired
SessionFactory session;

public List<Users> list() {

    return session.getCurrentSession().createQuery("from Users").list();
}

这是我的 HibernateUtil

private static final SessionFactory sessionFactory;

static {
    try {
        // Create the SessionFactory from standard (hibernate.cfg.xml) 
        // config file.
        sessionFactory = new Configuration().configure().buildSessionFactory();
    } catch (Throwable ex) {
        // Log the exception. 
        System.err.println("Initial SessionFactory creation failed." + ex);
        throw new ExceptionInInitializerError(ex);
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}

在执行应用程序后,我有一个 NullPointerException:

严重 [http-nio-8084-exec-97] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() 用于 servlet [spring-web] 在路径 [/ Holaspringmvc] 的上下文中抛出异常 [Request处理失败;嵌套异常是 java.lang.NullPointerException] 的根本原因 Java.lang.NullPointerException 在 com.tricas.dao.UserDaoImp.list (UserDaoImp.java:32) 请帮帮我。

【问题讨论】:

    标签: java spring hibernate spring-mvc


    【解决方案1】:

    我发现了我必须在服务和控制器中定义的错误结果,也使用 @Autowired

    这是我的服务。

    @Autowired
    UserDao usrdao;
    
    //private UserDao usrdao = new UserDaoImp();
    
    @Transactional
    public List<Users> getAllUsers() {        
        return usrdao.list();
    }
    

    这是我的控制器

    @Autowired
    UserService usrv;
    
    //private UserService usrv = new UserService();
    
    @RequestMapping(value = "/verusuarios", method = RequestMethod.GET)
    public String listPersons(Model model) {
        List<Users> list = usrv.getAllUsers();
        model.addAttribute("user", new Users());
        model.addAttribute("list", list);
        return "verusuarios";
    }
    

    此外,我必须添加以从这个答案中引导我:answer here

    【讨论】:

      【解决方案2】:

      更简单。只需声明 SessionFactory bean

      @Bean
      public AbstractSessionFactoryBean sessionFactoryBean(){
          AnnotationSessionFactoryBean sessionFactoryBean = new AnnotationSessionFactoryBean();
          sessionFactoryBean.setConfigLocation(new ClassPathResource("hibernate.cfg.xml"));
          return sessionFactoryBean;
      }
      

      LocalSessionFactoryBean 类似

      顺便说一句:你定义了组件扫描吗?

      <context:component-scan base-package="<my.base.package>" />
      

      【讨论】:

      • 我定义了&lt;context:component-scan base-package="com.tricas.controllers" /&gt;
      猜你喜欢
      • 1970-01-01
      • 2013-03-26
      • 2015-09-23
      • 1970-01-01
      • 2015-10-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多