【问题标题】:session is coming null while updating records in database更新数据库中的记录时会话为空
【发布时间】:2015-11-30 11:17:38
【问题描述】:

我正在进行正常的更新操作。我将会话设为空。请在下面的代码中找到异常和日志。

春季实现类-

@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 电子邮件

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() 方法,然后获取上述日志。如果我使用“加载”代替“获取”,那么同样的问题也会出现。请帮助。

【问题讨论】:

    标签: hibernate spring-mvc session


    【解决方案1】:

    我认为日志与代码和操作过程并不完全一致。如果在您获得用户时会话不为空,则它不应为以下几行。

    archiveUser() 可能完成得很好,但这是个问题

    return new UserDAOImpl().getAllUser();
    

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

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

    return getAllUser();
    

    【讨论】:

    • 哦!!,谢谢,你是对的。我只是改变了它并得到了结果。非常感谢@Predrag Maric
    猜你喜欢
    • 2012-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-15
    相关资源
    最近更新 更多