I'm getting the error Not supported for DML operations
when I use the following HQL...
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid")
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp);
What could be causing the issue? It doesn't seem to be a common error given the few results I've found in Google.
I was also having the same problem with annotations.After searching and doing some tricks I was able to solve it. There are some below steps which you need to verify while using DML operation with JPA.
Use anotation @Modifying(org.springframework.data.jpa.repository.Modifying) and @Transactional(org.springframework.transaction.annotation.Transactional) on required method.
Use void as return type of method.
e.g:-
@Modifying
@Query("UPDATE ProcedureDTO o SET o.isSelectedByUser =?1")
@Transactional
public void getListOfProcedureBasedOnSelection(Boolean isSelected);
Make sure your service class method which calls
updateLastActivity
has@Transactional(org.springframework.transaction.annotation.Transactional)
annotation. and modify the repository method to below,For more insights please use this answer.
Check the post hibernate hql ERROR: Not supported for DML operations in the hibernate users forum.
Most likely you called
for your
UPDATE
query. Instead you should callThe same happened to me because, being q an object of class Query, q.list() is not to be used for updates or deletes, but q.executeUpdate()