我正在尝试更新我在arraylist中拥有id的每条记录但是我收到此错误:

IllegalStateException occured : org.hibernate.hql.QueryExecutionRequestException: Not supported for DML operations [update models.UserOnline uo SET currentRoom_id = :roomid where uo.id IN (:list)]

这就是我正在尝试的:

    Query update_query = JPA.em().createQuery("update UserOnline uo SET currentRoom_id = :roomid where uo.id IN (:list)");
    update_query.setParameter("roomid", null);
    update_query.setParameter("list", idlist);

    List<UserOnline> actual = update_query.getResultList();

有什么想法有什么不对吗?

===============>>#1 票数:1 已采纳

我会尝试使用update_query.executeUpdate();

来自文档

===============>>#2 票数:1

就像Gonzalo已经说过的那样,你必须使用executeUpdate ()。

这是因为你实际上修改了数据

如果要从数据库中获取数据则只使用getResultList()或getSingleResult()

一个小帮手:如果您的查询有表单,请使用executeUpdate ()

UPDATE ... SET .. WHERE ..
or
DELETE ... WHERE ...

如果查询看起来像是使用getResultList ()或getSingleResult ()

SELECT ... FROM xxx WHERE ... 
or just
FROM xxx WHERE ... 

===============>>#3 票数:0

好吧,如果我们使用Spring Repositories(CrudRepository或其任何类型),并且如果我们有一个带有更新Query的方法声明,那么,

@Query(“update employee e set e.name =:name where e.id =:id”)int updateEmployee(@Param(“name”)String name,@ Param(“id”)Long id);

然后我们将得到相关的Spring Exception org.springframework.dao.InvalidDataAccessApiUsageException:org.hibernate.hql.internal.QueryExecutionRequestException:不支持DML操作

只需在方法上添加@Modifying注释就可以了。

  ask by translate from so

未解决问题?本站智能推荐: