Почему ваш 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);