在更新数据库中的记录时,会话将变为空

时间:2015-11-30 11:17:38

标签: hibernate spring-mvc session

我正在进行正常的更新操作。我的会话为null。请找到以下代码,我将获得例外和日志。

春天的实施课 -

@Autowired
    private SessionFactory sessionFactory;

    Session session=null;

    private void assignSessionLocalVariable(){
        if(session == null || !session.isOpen()){
            try{
                session = sessionFactory.openSession();
            }catch(Exception e){session = null;
              logger.error("Stack trace ::"+e);
                logger.error("/### Session is null ####/");
            }
        }
    }
@Override
    public List<User> archieveUser(int userId) {
        assignSessionLocalVariable();
        User userIdDel = (User) session.get(User.class, userId);
        if(userIdDel.getStatus().equalsIgnoreCase("YES"))
            {   userIdDel.setStatus("NO");      }
        else{  userIdDel.setStatus("YES");  }

        logger.info("### object of the user ####"+userIdDel);
        try{    

                Transaction tx=session.beginTransaction();
                session.saveOrUpdate(userIdDel);
                tx.commit();
         }
         catch(Exception e){
             logger.error("### Exception occured while archiveing USERS in IMPL #### ["+e+"] \n");
         }
        session.close();
        return new UserDAOImpl().getAllUser();
    }

public void closeSessionObjects(){
        if(null != session) session.clear();

    }

日志文件 -

  

2015-11-30 16:42:54 INFO UserDAOImpl:74 - ###用户对象

     用户[id = 2 firstName Bharat lastName Bhushan creation_time 2015-11-30 16:19:24.0 last_update_time 2015-11-30 16:19:24.0 email      

bh@yahoo.com mobile 5800000 status YES] 2015-11-30 16:42:54错误   UserDAOImpl:30 - 堆栈跟踪:: java.lang.NullPointerException   2015-11-30 16:42:54错误UserDAOImpl:31 - / ###会话为空#### /

我正在调用archiveUser()方法,然后获取上面的日志。如果我使用'load'代替'get',那么也会出现同样的问题。请帮助。

1 个答案:

答案 0 :(得分:1)

我认为日志与代码和行动方式并不完全一致。如果在获得用户时会话不为null,则它不应该是以下几行。

archiveUser()可能会很好,但这是一个问题

return new UserDAOImpl().getAllUser();

并且在另一种方法中失败,因为sessionFactory为空。

当你自己实例化bean时,你绕过了Spring,因此没有任何Spring托管依赖项会被注入。如果getAllUser()在同一个bean中(看起来如此),只需将该行更改为

即可
return getAllUser();