簡體   English   中英

使用 Spring Data JPA 的派生查詢

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM