繁体   English   中英

Spring Hibernate-NullPointerException SessionFactory

[英]Spring Hibernate - NullPointerException SessionFactory

我收到有关SessionFactory的错误。

CrudController.java

@Controller
public class CrudController {

@Autowired
private AlbumBo albumBo;

@RequestMapping(value = "/addAlbum")
@ResponseBody
public void addAlbum(
        @RequestParam("NameRecordCompany") String nameRecordCompany,
        @RequestParam("NameAlbum") String nameAlbum,
        @RequestParam("YearName") String yearAlbum,
        @RequestParam("NameArtist") String nameArtist,
        @RequestParam("NameCategory") String nameCategory,
        @RequestParam("SongList") String songList) throws JSONException {

    Song temp = new Song();
    ArrayList<Song> listaCanzoni = new ArrayList();

    String songs = "{" + "\"songs\":" + songList + "}";
    JSONObject jsonObjectSongList = new JSONObject(songs);
    JSONArray jsonArraySongList = (JSONArray) jsonObjectSongList.get("songs");

    for (int i = 0; i < jsonArraySongList.length(); i++) {
        temp.setName((String) jsonArraySongList.getJSONObject(i).get("songName"));
        temp.setDuration((String) jsonArraySongList.getJSONObject(i).get("songDuration"));

        listaCanzoni.add(new Song(temp.getName(), temp.getDuration()));
    }

    Artist artist = new Artist(nameArtist);
    Category category = new Category(nameCategory);
    Album album = new Album(nameAlbum, yearAlbum);

    album.setArtist(artist);
    album.setCategory(category);

    try {
        albumBo.save(album); //line 67
        JOptionPane.showMessageDialog(null, "albumDao.save(album) eseguita");
    } catch(Exception ex) {
        ex.printStackTrace();
    } 

}

}

AlbumDaoImpl.java

public class AlbumDaoImpl implements AlbumDao {

@Autowired
SessionFactory sessionFactory;

public SessionFactory getSessionFactory() {
    return sessionFactory;
}

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

@Override
public void save(Album album) throws Exception {
    Session session = sessionFactory.openSession(); //line 38
    Transaction tx = null;

    try {
        tx = session.beginTransaction();
        session.saveOrUpdate(album);
        tx.commit();
    } catch (HibernateException e) {
        if (tx != null) {
            tx.rollback();
        } else {
            e.printStackTrace();
        }
    } finally {
        session.close();
    }
}
}

AlbumBoImpl.java

public class AlbumBoImpl implements AlbumBo{

private AlbumDao albumDao;

static final Logger logger = Logger.getLogger(AlbumBoImpl.class);

public AlbumDao getAlbumDao() {
    return albumDao;
}

public void setAlbumDao(AlbumDao albumDao) {
    this.albumDao = albumDao;
}

@Override
public void save(Album album) throws Exception {
    try{
        albumDao.save(album); //line 35
    }catch(Exception e){
        logger.error(e);
        throw e;
    } 
}
}

applicationContext.xml中

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:p="http://www.springframework.org/schema/p"
   xmlns:tx="http://www.springframework.org/schema/tx/spring-tx-4.0.xsd"
   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-4.0.xsd
   http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
   http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.0.xsd">

<bean id="dataSource"
      class="org.springframework.jdbc.datasource.DriverManagerDataSource"
      p:driverClassName="${jdbc.driverClassName}"
      p:url="${jdbc.url}"
      p:username="${jdbc.username}"
      p:password="${jdbc.password}"/>

<bean id="propertyConfigurer"
      class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
      p:location="/WEB-INF/jdbc.properties" />

<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
    <property name="dataSource" ref="dataSource" />
    <property name="annotatedClasses">
        <list>
            <value>it.davidefruci.casadiscografica2.beans.Album</value>
            <value>it.davidefruci.casadiscografica2.beans.Artist</value>
            <value>it.davidefruci.casadiscografica2.beans.Song</value>
            <value>it.davidefruci.casadiscografica2.beans.RecordCompany</value>
            <value>it.davidefruci.casadiscografica2.beans.Category</value>
        </list>
    </property>
    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.hbm2ddl.auto">update</prop>
        </props>
    </property>
</bean>

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

<!-- DAO -->
<bean id="albumDao" class="it.davidefruci.casadiscografica2.daoImpl.AlbumDaoImpl"/>    
<bean id="artistDao" class="it.davidefruci.casadiscografica2.daoImpl.ArtistDaoImpl"/>    
<bean id="categoryDao" class="it.davidefruci.casadiscografica2.daoImpl.CategoryDaoImpl"/>    
<bean id="recordCompanyDao" class="it.davidefruci.casadiscografica2.daoImpl.RecordCompanyDaoImpl"/>    
<bean id="songDao" class="it.davidefruci.casadiscografica2.daoImpl.SongDaoImpl"/>     

<!-- BO -->
<bean id="albumBo" class="it.davidefruci.casadiscografica2.boImpl.AlbumBoImpl">
    <property name="albumDao" ref="albumDao"></property>
</bean>
<bean id="artistBo" class="it.davidefruci.casadiscografica2.boImpl.ArtistBoImpl">
    <property name="artistDao" ref="artistDao"></property>
</bean>    
<bean id="categoryBo" class="it.davidefruci.casadiscografica2.boImpl.CategoryBoImpl">
    <property name="categoryDao" ref="categoryDao"></property>
</bean>    
<bean id="recordCompanyBo" class="it.davidefruci.casadiscografica2.boImpl.RecordCompanyBoImpl">
    <property name="recordCompanyDao" ref="recordCompanyDao"></property>
</bean>    
<bean id="songBo" class="it.davidefruci.casadiscografica2.boImpl.SongBoImpl">
    <property name="songDao" ref="songDao"></property>
</bean>

我有一个JSP,将要保存的数据添加到数据库中。 当我单击提交按钮时,将调用Ajax调用。 该调用将调用CrudController,后者应使用addAlbum方法将数据保存在我的数据库中。

调用CrudController时,Tomcat告诉我:

显示java.lang.NullPointerException在it.davidefruci.casadiscografica2.daoImpl.AlbumDaoImpl.save(AlbumDaoImpl.java:38) 在it.davidefruci.casadiscografica2.boImpl.AlbumBoImpl.save(AlbumBoImpl.java:35) 在it.davidefruci.casadiscografica2。sun.reflect.NativeMethodAccessorImpl.invoke0 (本机方法)处的controllers.CrudController.addAlbum(CrudController.java:67)sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:62)处的sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:62) org.springframework.web.method 上java.lang.reflect.Method.invoke(Method.java:497)上的java:43) org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:221)上的java.lang.reflect.Method.invoke(Method.java:497) org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)的org.springframework.web.servlet.mvc.method上的.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:137) .annotation.R org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:706)上的equestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:777)在org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter处。 org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:943)的org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:877)的handle(AbstractHandlerMethodAdapter.java:85) org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:857)上的.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:966)在javax.servlet.http.HttpServlet.service(HttpServlet.java:622) )的org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:842)的javax.servlet.http.HttpServlet.service(HttpServlet.java:729)org.apache.catalina.core.ApplicationFilterChain.internalDoFilter( Applicati org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)上的onFilterChain.java:291)org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)上的org.apache.tomcat.websocket.server org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)处的.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:239)在org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java :219)位于org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106),位于org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502),位于org.apache.catalina.core。 org.org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)的org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:617)的StandardHostValve.invoke(StandardHostValve.java:142) org.apache的.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88) org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)上的.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)在org.apache.coyote.AbstractProtocol $ AbstractConnectionHandler.process(AbstractProtocol.java) :668)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.doRun(NioEndpoint.java:1521)在org.apache.tomcat.util.net.NioEndpoint $ SocketProcessor.run(NioEndpoint.java:1478)在org.apache.tomcat.util.threads.TaskThread $ WrappingRunnable上的java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:617)上的java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)。在java.lang.Thread.run(Thread.java:745)上运行(TaskThread.java:61)

我对sessionFactory初始化有误吗?

<bean id="personDao"class="com.studytrails.tutorials.springhibernatesessionfactory.PersonDao">
        <property name="sessionFactory" ref="sessionFactory" />
        </bean>

您将需要在正在使用的DAO中注入会话工厂,这可以帮助您对Object进行CRUD操作,您可以使用XML进行配置或使用注释。

还请通过以下给定的条件来帮助自己
Spring Hibernate集成示例

您可以做两件事,一是更改自己将SessionFactory注入Dao。

<!-- DAO -->
<bean id="albumDao" class="it.davidefruci.casadiscografica2.daoImpl.AlbumDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>   

您可以对所有DAO执行此操作。

要么

将组件扫描放在applicationContext.xml XML配置上,以便SessionFactory可以自动装配。

<context:component-scan base-package="it.davidefruci.casadiscografica2"/>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM