Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 要遍历的节点不能为空hibernate update_Java_Hibernate - Fatal编程技术网

Java 要遍历的节点不能为空hibernate update

Java 要遍历的节点不能为空hibernate update,java,hibernate,Java,Hibernate,嗨,我直接说到点子上了 下面是我在尝试执行查询时遇到的异常 要遍历的节点不能为null @Autowired private SessionFactory sessionFactory; Session session = sessionFactory.openSession(); Query query = query = session.createQuery("UPDATE User set isLocked =:locked, wrongAttempt=

嗨,我直接说到点子上了 下面是我在尝试执行查询时遇到的异常 要遍历的节点不能为null

 @Autowired
        private SessionFactory sessionFactory;
    Session session = sessionFactory.openSession();
    Query query = query = session.createQuery("UPDATE User set isLocked =:locked, wrongAttempt=:attempt  where userId in(:list)");
query.executeUpdate();
当我用

Query query= session.createSQLQuery("update user where is_locked=:locked,wrong_attempt=:attempt where user_id in(:list)") 
query.executeUpdate();
工作很好。
你能不能请任何人告诉我为什么我在第一种情况下会遇到这个异常。

你为什么要这样做,这很容易出错。以这种方式做

public void yourUpdateMethod(){
User user = (User)session.get(User.class,userId);
if(!(user==null)){
 user.setNoLock(true);
// Above line is just an example, set whatever you want to, ideally this should be done in Service layer, but okay for now
    session.merge(user);
    session.flush();
  }
}

这样您就不会有错误,也不需要使用SQL查询。另外,如果Hibernate抱怨无法更新空实体,则表示找不到用户,这正是我检查用户是否为空的原因。

谢谢您的回复。这里我得到的是用户id列表。我不理解您在这里进行的空检查。我正在尝试删除数据库表中基于用户id的用户锁,所以这有什么需要。是的,但是您还应该检查用户是否在那里。这是一个很好的做法。另外,使用Hibernate的要点是,尽量减少在代码中使用SQL查询的依赖性,并使用Java代码,这正是我正在做的。