我对Spring框架还有点新意,我只想问一个简单的问题。
我已经加载了以下查询,但出于某些原因我得到了:
对方法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);
只需要知道查询是否正确完成
谢谢:)
答案 0 :(得分:0)
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);
}
答案 1 :(得分:0)
为什么您的CrudRepository
定义为CrudRepository<UserModel, String>
?
应该是CrudRepository<UserModel, Long>
,因为id
实体的UserModel
类型为Long
。
此外,在您提出的查询中:
@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);