[英]Derived Queries with Spring Data JPA
My task is to compose a query without using the @Query
annotation.我的任务是在不使用
@Query
注释的情况下编写查询。 If you use select
, it will work, but if you use update
, then the exception pointing to the line query.executeUpdate();如果你使用
select
,它会工作,但如果你使用update
,那么异常指向行 query.executeUpdate();
javax.persistence.TransactionRequiredException: Executing an update/delete query
CustomUserRepository:自定义用户存储库:
@Repository
public interface CustomUserRepository {
List<User> findByUniqueId(String uniqueId,UserStatus role);
}
CustomUserRepositoryImpl: 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();
}
ControllerFour:控制器四:
@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";
}
I think that message says all:我认为该消息说明了一切:
javax.persistence.TransactionRequiredException: Executing an update/delete query
javax.persistence.TransactionRequiredException:执行更新/删除查询
When using EntityManager
to execute any update operation (update/insert/delete) you have to do that within transaction.当使用
EntityManager
执行任何更新操作(更新/插入/删除)时,您必须在事务中执行此操作。
Therefore your code should look like:因此,您的代码应如下所示:
entityManager.getTransaction().begin();
// execute any operation on entityManager
entityManager.getTransaction().commit();
Side note, it is generally recommended to use @PersistenceContext
instead of @Autowired
as that gives more control over the injected EntityManager
(especially if you have multiple DB configurations).旁注,通常建议使用
@PersistenceContext
而不是@Autowired
,因为这样可以更好地控制注入的EntityManager
(特别是如果您有多个数据库配置)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.