[英]Derived Queries with Spring Data JPA
我的任務是在不使用@Query
注釋的情況下編寫查詢。 如果你使用select
,它會工作,但如果你使用update
,那么異常指向行 query.executeUpdate();
javax.persistence.TransactionRequiredException: Executing an update/delete query
自定義用戶存儲庫:
@Repository
public interface CustomUserRepository {
List<User> findByUniqueId(String uniqueId,UserStatus role);
}
CustomUserRepositoryImpl:
@Autowired
private EntityManager entityManager;
@Override
public List<User> findByUniqueId(String uniqueId, UserStatus role) {
Query query = entityManager.createQuery("update User u set u.userStatus=:userStatus where u.unique=:unique");
query.setParameter("userStatus", role).setParameter("unique", uniqueId);
query.executeUpdate();
return query.getResultList();
}
控制器四:
@Autowired
private UserRepository userRepository;
@PostMapping
public String replaceStatusPost (@RequestParam("uniqueid") String uniqueid, @RequestParam("userstatus") UserStatus userstatus, Model model) {
List <User> user = userRepository.findByUniqueId(uniqueid, userstatus);
model.addAttribute("attz", user);
return "replaceStatus";
}
我認為該消息說明了一切:
javax.persistence.TransactionRequiredException:執行更新/刪除查詢
當使用EntityManager
執行任何更新操作(更新/插入/刪除)時,您必須在事務中執行此操作。
因此,您的代碼應如下所示:
entityManager.getTransaction().begin();
// execute any operation on entityManager
entityManager.getTransaction().commit();
旁注,通常建議使用@PersistenceContext
而不是@Autowired
,因為這樣可以更好地控制注入的EntityManager
(特別是如果您有多個數據庫配置)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.