2013-07-12 43 views
28

Tôi nhận được lỗi Not supported for DML operations khi tôi sử dụng HQL sau ..."Không được hỗ trợ cho các hoạt động DML" với truy vấn đơn giản CẬP NHẬT

@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid") 
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp); 

Điều gì có thể gây ra vấn đề này? Nó không có vẻ là một lỗi phổ biến cho vài kết quả tôi đã tìm thấy trong Google.

+0

Chồng xếp chồng đầy đủ? – kan

+0

bạn có thể cung cấp danh sách đầy đủ mã và theo dõi ngăn xếp hay không. –

+0

Nhìn vào giải pháp được chấp nhận cho http://stackoverflow.com/a/12426144/172306 này trông tương tự. –

Trả lời

37

Kiểm tra bài đăng hibernate hql ERROR: Not supported for DML operations trong diễn đàn người dùng ngủ đông.

Nhiều khả năng bạn gọi

querySt.list(); 

cho truy vấn UPDATE của bạn. Thay vào đó bạn nên gọi

querySt.executeUpdate(); 
+42

Tôi cần '@ Sửa đổi' - cảm ơn !! – Webnet

+2

Tôi chỉ giải quyết vấn đề tương tự bằng cách thêm chú thích Sửa đổi. Một gợi ý nữa: kiểu trả về hàm phải không có giá trị, vì tôi đã sao chép hàm từ một hàm truy vấn bình thường nên kiểu trả về là List , sau đó tôi có lỗi tương tự ngay cả sau khi tôi đã thêm chú thích sửa đổi. – cn123h

+0

@ cn123h có cùng sự cố, sao chép dán có loại trả về là Danh sách thay vì void –

0

Cùng xảy ra với tôi bởi vì, là q một đối tượng của lớp Query, q.list() là không được sử dụng để cập nhật hoặc xóa, nhưng q.executeUpdate()

0

Đảm bảo phương thức lớp dịch vụ của bạn gọi updateLastActivity có chú thích @Transactional(org.springframework.transaction.annotation.Transactional). và sửa đổi phương thức lưu trữ thành bên dưới,

import org.springframework.data.jpa.repository.Modifying; 
import org.springframework.data.jpa.repository.Query; 
... 
@Modifying 
@Query("UPDATE WorkstationEntity w SET w.lastActivity = :timestamp WHERE w.uuid = :uuid") 
void updateLastActivity(@Param("uuid") String uuid, @Param("timestamp") Timestamp timestamp); 

Để biết thêm thông tin chi tiết, vui lòng sử dụng this answer.

1

Tôi cũng gặp vấn đề tương tự với chú thích. Sau khi tìm kiếm và thực hiện một số thủ thuật, tôi đã có thể giải quyết nó. Có một số bước dưới đây mà bạn cần xác minh trong khi sử dụng hoạt động DML với JPA.

  1. Sử dụng anotation @Modifying (org.springframework.data.jpa.repository.Modifying) và @Transactional (org.springframework.transaction.annotation.Transactional) về phương pháp yêu cầu.

  2. Sử dụng khoảng trống làm kiểu trả về của phương thức.

ví dụ như: -

@Modifying

@Query ("UPDATE ProcedureDTO o SET o.isSelectedByUser = 1?")

@Transactional

public void getListOfProcedureBasedOnSelection (Boolean isSelected);

Các vấn đề liên quan