Java JPQL何处在数组查询

Java JPQL何处在数组查询,java,hibernate,playframework,jpql,Java,Hibernate,Playframework,Jpql,我试图更新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)] 这就是我正在尝试的: Quer

我试图更新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();
Query update\u Query=JPA.em().createQuery(“update UserOnline uo SET currentRoom\u id=:roomid where uo.id IN(:list)”;
更新_query.setParameter(“roomid”,null);
更新_query.setParameter(“list”,idlist);
List actual=update_query.getResultList();

有什么问题吗?

我会尝试使用
update\u query.executeUpdate()


从.

就像Gonzalo已经说过的,您必须使用执行更新

这是,因为您实际上正在修改数据

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

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

UPDATE ... SET .. WHERE ..
or
DELETE ... WHERE ...
如果查询如下所示,请使用getResultList()或getSingleResult()

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

如果我们使用Spring存储库(Crudepository或其任何类型),如果我们有一个带有更新查询的方法声明 就是

@查询(“更新员工e集e.name=:name,其中e.id=:id”) int updateEmployee(@Param(“name”)字符串名称,@Param(“id”)长id)

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

只需在方法上添加@modify注释,就可以了