Простое @Modifying - @Query выпуск Spring JPA - PullRequest
0 голосов
/ 08 июня 2018

Я все еще немного новичок в среде 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);

Просто нужно знать, правильно ли выполнен запрос

Спасибо:)

Ответы [ 2 ]

0 голосов
/ 09 июня 2018

Почему ваш 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);
0 голосов
/ 09 июня 2018

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);


} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...