JPQL在数组查询中的位置

时间:2011-12-11 18:15:03

标签: 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)]

这就是我正在尝试的:

    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();

任何想法有什么不对?

3 个答案:

答案 0 :(得分:1)

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

来自docs

答案 1 :(得分:1)

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

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

如果您想从数据库中获取数据,仅使用getResultList()或getSingleResult()。

一个小帮手: 如果您的查询的格式为

,请使用 executeUpdate ()
UPDATE ... SET .. WHERE ..
or
DELETE ... WHERE ...

如果查询类似

,请使用 getResultList ()或 getSingleResult ()
SELECT ... FROM xxx WHERE ... 
or just
FROM xxx WHERE ... 

答案 2 :(得分:0)

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

@Query(“更新员工e设置e.name =:名称,其中e.id =:id”) int updateEmployee(@Param(“name”)字符串名称,@ Param(“id”)长id);

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

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