Java 要遍历的节点不能为空hibernate update
嗨,我直接说到点子上了 下面是我在尝试执行查询时遇到的异常 要遍历的节点不能为nullJava 要遍历的节点不能为空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=
@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代码,这正是我正在做的。