#java #sql #spring-data-jpa
#java #sql #spring-data-jpa
Вопрос:
Я столкнулся с проблемой с моим JpaRepository в приложении spring boot Я хочу выполнить простой запрос на обновление моей базы данных, но оказывается, что собственный запрос довольно раздражает, пожалуйста, помогите
public interface ImageRepository extends JpaRepository<Image, Integer> {
@Modifying
@Transactional
@Query(value = "UPDATE image SET path =(0?), status = (1?) WHERE Id = (2?)", nativeQuery = true)
void update(String path ,String status,int Id);
}
приведенный выше код возвращает следующее сообщение об ошибке
com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near '@P0'.
Я попытался изменить диалект SQL на
org.hibernate.dialect.SQLServer2008Dialect
org.hibernate.dialect.SQLServer2012Dialect
соответственно, и ни один из них не сработал.
Я также попытался написать запрос другим способом, который не выдает мне ошибку, но не обновляет поля. он может определить целочисленное значение из метода, но он установит для строковых значений значение emply:
@Query(value = "UPDATE image SET physical_path =(0), status = (1) WHERE Id = (2)", nativeQuery = true)
Если кто-нибудь сталкивался с такой же проблемой, пожалуйста, поддержите
Ответ №1:
Сформулируйте запрос следующим образом :
@Query(value = "UPDATE image i SET path =:path, status = :status WHERE i.Id = :Id", nativeQuery = true)
void update(@Param("path") String path , @Param("status") String status, @Param("Id") int Id);
Для позиционных параметров :
@Query(value = "UPDATE image i SET path = ?1, status = ?2 WHERE i.Id = ?3", nativeQuery = true)
void update(String path , String status, int Id);
Комментарии:
1. спасибо, первый метод сработал для меня. Я попробовал второй, который вы предложили, но у меня это не сработало. в любом случае, спасибо, теперь я могу переместить его с остальной частью кода. Я был действительно раздражен этим методом более двух часов
2. Нет проблем. Рад узнать, что вы могли бы продолжить свою работу.
Ответ №2:
Из JPA-ссылки Spring Data вы можете видеть, что параметры (в том виде, в котором вы хотите их использовать) определяются как -> ?1, ?2 etc..
Кроме того, пожалуйста, имейте в виду, что синтаксис JPQL немного отличается от обычного sql.
@Modifying
@Query("update Image i set i.path = ?1 where i.status = ?2 where i.id = ?3")
void update(String path, String status, int id);
Комментарии:
1. спасибо за информацию, но я пробовал этот запрос, и он не справился с задачей. однако решение указано @Som. еще раз спасибо за ответ
2. Эй, @Fadi, не стесняйтесь, дайте мне знать, в чем проблема с этим ответом
3. Я получаю неправильный синтаксис рядом с ошибкой «@ P0». Что указывает на то, что параметры не могут быть доступны из запроса. Странно то, что у меня был тот же код два месяца назад, и он работал так, как ожидалось. Но после новой установки SQL server 2019 у меня по некоторым причинам начали возникать проблемы с репозиторием JPA.