java 简单@修改- @query 问题Spring JPA

bwitn5fc  于 2022-12-10  发布在  Java
关注(0)|答案(2)|浏览(145)

我已经加载了以下查询,但是由于某种原因,我得到了:
对方法public abstract void的查询验证失败
这发生在我开始应用程序之前,如果我注解掉它,它就会工作得很好。
查询的其余部分工作正常
问题查询为:

@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE user u SET u.name=:name WHERE u.internalId=:internalId")
public  void markEntryAsRead(@Param("internalId") String internalId, @Param("name") String name);

只需要知道查询是否正确完成

vmjh9lq9

vmjh9lq91#

为什么您的CrudRepository定义为CrudRepository<UserModel, String>
它应该是CrudRepository<UserModel, Long>,因为UserModel实体的idLong类型。
此外,在您提供的查询中:
@Transactional @Modifying(clearAutomatically = true) @Query("UPDATE user u SET u.internalId=:internalId WHERE u.id=:id") void markEntryAsRead(@Param("id") String id, @Param("internalId") String internalId);
您将id参数作为String传递,但在中应为int,因为在实体中您有private int id;internalId相同。
"所以"
尝试将CrudRepository定义为CrudRepository<UserModel, Long>,并且在查询中不使用User,而使用UserModel,例如:

@Transactional
@Modifying //clearAutomatically is true by default, so there's no need to specify it
@Query("UPDATE UserModel u SET u.internalId=:internalId WHERE u.id=:id")
void markEntryAsRead(@Param("id") int id, @Param("internalId") int internalId);

@Transactional
@Modifying //clearAutomatically is true by default, so there's no need to specify it
@Query("UPDATE UserModel u SET u.name=:name WHERE u.internalId=:internalId")
public void markEntryAsRead(@Param("internalId") int internalId, @Param("name") String name);

另一种解决方案

由于使用的是CrudRepository,因此只需调用:

UserModel userModel = userRepo.findOne(id);
userModel.setInternalId(internalId);
userRepo.save(userModel);

或者,如果不是按id选择:

List<UserModel> userList = userRepo.findByName(internalId);
userList.forEach(user -> user.setName(name));
userRepo.save(userList);
2skhul33

2skhul332#

userRepo为:

public interface UserRepo extends CrudRepository<UserModel, String>{

@Transactional
Long internalId(String internalId);

@Transactional
@Modifying(clearAutomatically = true)
@Query("UPDATE user u SET u.internalId=:internalId WHERE u.id=:id")
void markEntryAsRead(@Param("id") String id, @Param("internalId") String internalId);

}

相关问题