JPQL где в запросе массива - PullRequest
0 голосов
/ 11 декабря 2011

Я пытаюсь обновить каждую запись, для которой у меня есть идентификатор в моем массиве, но я получаю эту ошибку:

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 ]

1 голос
/ 11 декабря 2011

Как уже сказал Гонсало, вам придется использовать executeUpdate ().

Это , потому что вы на самом деле МОДИФИЦИРУЕТЕ данные .

Вы используете getResultList () или getSingleResult (), только если хотите получить данные из базы данных.

маленький помощник: используйте executeUpdate () если ваш запрос имеет форму

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

, используйте getResultList () или getSingleResult (), если запрос выглядит как

SELECT ... FROM xxx WHERE ... 
or just
FROM xxx WHERE ... 
1 голос
/ 11 декабря 2011

Я бы попробовал с update_query.executeUpdate();

Из документов .

0 голосов
/ 18 декабря 2013

Хорошо, если мы используем репозитории Spring (CrudRepository или любой другой его тип) и если у нас есть объявление метода с обновлением Query То есть

@ Query («обновить сотрудника e set e.name =: имя, где e.id =: id») int updateEmployee (@Param ("name") Имя строки, @Param ("id") Длинный идентификатор);

Затем мы получим соответствующее исключение Spring org.springframework.dao.InvalidDataAccessApiUsageException: org.hibernate.hql.internal.QueryExecutionRequestException: не поддерживается для операций DML

Просто добавьте аннотацию @Modifying к методу, и все будет хорошо.

...