Spring SessionFactory Injection Issue - PullRequest
       4

Spring SessionFactory Injection Issue

0 голосов
/ 04 июля 2011

Я пытался научиться использовать различные функции Spring 3.0.x и столкнулся с проблемой, когда пытался внедрить фабрику сессий в реализацию DAO. Я получаю исключение NullPointerException, когда пытаюсь использовать внедренную переменную экземпляра SessionFactory, что заставляет меня поверить, что проблема существует в определении компонента.

диспетчер-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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="
    http://www.springframework.org/schema/beans
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
    http://www.springframework.org/schema/context
    http://www.springframework.org/schema/context/spring-context-2.5.xsd">

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

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

  <bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
    <property name="driverClassName" value="oracle.jdbc.OracleDriver"/>
    <property name="url" value="jdbc:oracle:thin:@xxx.xxx.x.xxx:xxxx:xx"/>
    <property name="username" value="xxx"/>
    <property name="password" value="xxx"/>
  </bean>

  <bean id="mySessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
    <property name="dataSource" ref="myDataSource"/>
    <property name="hibernateProperties">
        <value>
            hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
        </value>
    </property>
  </bean>

</beans>

EntryImpl.java

package com.timerecorder.entity;

import java.util.List;
import org.hibernate.SessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

@Repository
public class EntryImpl implements EntryDao
{

  private SessionFactory sessionFactory;

  @Autowired
  public void setSessionFactory(SessionFactory sessionFactory) 
  {
      this.sessionFactory = sessionFactory;
  }

  @Override
  public boolean saveEntry(EntryForm efd) 
  {
      // Place the details from the entry form into the Entry entity
      Entry e = new Entry();
      e.setId(Long.valueOf(efd.getUserId()));

      this.sessionFactory.getCurrentSession().save(e);

      return true;
  }

  @Override
  public boolean removeEntry(Long id) 
  {
      throw new UnsupportedOperationException("Not supported yet.");
  }

  @Override
  public List getEntries(Long id) 
  {
      throw new UnsupportedOperationException("Not supported yet.");
  }

  @Override
  public Entry getEntry(Long id) 
  {
      return new Entry();
  }

}

Любая помощь будет оценена.

С уважением,

Justin

Ответы [ 3 ]

2 голосов
/ 25 декабря 2011

Похоже, что это может быть проблемой соглашения об именах в ваших определениях бинов.

Попробуйте переименовать

id= "mySessionFactory"

в

id= "sessionFactory"

Дайте мне знать, если это поможет.

0 голосов
/ 21 декабря 2011

Попробуйте метод init () для автоматического подключения фабрики сеансов.

Вот как это работает для меня ->

@Repository
public class UserDaoImpl extends HibernateDaoSupport implements UserDao {
    @Autowired
    public void init(SessionFactory factory) {
        setSessionFactory(factory);
    }
}

setSessionFactory - метод, предоставляемый HibernateDaoSupport

0 голосов
/ 04 июля 2011

Похоже, что вы автоматически подключаете по имени, но вам нужно вместо этого автоматически подключать sessionFactory по типу - или вы можете переименовать определение компонента в sessionFactory, и оно должно просто работать.

Кроме того, вам нужно быть уверенным, что вы выводите свой bean-компонент из контекста приложения, а не просто обновляете его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...