嗨,我直接说到了这一点 下面是我的查询,而我尝试执行查询我得到此异常 要遍历的节点不能为空。
@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();
工作正常。 你能不能请任何一个机构让我知道为什么我在第一种情况下得到这个例外。
答案 0 :(得分:2)
你为什么这样做,它很容易出错。以这种方式做事
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抱怨它无法更新Null实体,则意味着找不到用户,这正是我检查用户是否为空的原因。