JPA @query аннотация для запроса на обновление (oracle sql developer) - org.hibernate.exception.GenericJDBCException: не удалось выполнить запрос - PullRequest
0 голосов
/ 04 марта 2019

У меня есть один файл репозитория с общим исходным кодом для одного и того же и один класс контроллера, через который я выполняю вызов этой функции @query для одного оператора update.Я хочу обновить данные из одного столбца в моей базе данных Oracle, для которой я написал JPA update @query и определил функцию в одном из файлов репозитория, поэтому выполнение вызова из одного из классов моего контроллера не может выполнить запрос.

Файл репозитория

package com.sid.demo.repository;

import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import com.sid.demo.model.hindalco_model;

public interface update_password extends JpaRepository<hindalco_model,Integer> 
{   
    @Query(value="update USER_REGISTRATION set password = :password WHERE user_name = :user_name and email = :email",nativeQuery=true)
    List<String> findbyuser_update(@Param("password") String password,String user_name,String email);   
}

Класс контроллера

@RequestMapping(value="/update_password",method = RequestMethod.POST)
    public String update_password(@RequestParam String password)
    {
        //String rnumber_verified=randomNumber;
        //int random_otp_verified=Integer.parseInt(rnumber_verified);



        //System.out.println("update query string value = "+hindalco_user_login12);
        System.out.println("user_name outside try = "+user_name12);
        System.out.println("email outside try = "+password12);
        try
        {
            System.out.println("user_inside try = "+user_name12);
            System.out.println("email inside try = "+password12);

            update_password_repo.findbyuser_update(password,user_name12,password12);
            return "Entered password successfully updated"; 
        }
        catch(Exception e)
        {
            return"Iam sorry entered password did not match "+e;
        }

    }

Класс модели

package com.sid.demo.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;


@Entity
@Table(name="user_registration")
public class hindalco_model
{
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Id
    @Column(name="user_id")
    private int user_id;

    @Column(name="user_name")
    private String user_name;

    @Column(name="email")
    private String email;

    @Column(name="password")
    private String password;

    public int getUser_id() {
        return user_id;
    }

    public void setUser_id(int user_id) {
        this.user_id = user_id;
    }

    public String getUser_name() {
        return user_name;
    }

    public void setUser_name(String user_name) {
        this.user_name = user_name;
    }

    public String getEmail() {
        return email;
    }

    public void setEmail(String email) {
        this.email = email;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }



    @Override
    public String toString() {
        return "hindalco_model [user_id=" + user_id + ", user_name=" + user_name + ", email=" + email + ", password="
                + password +"]";
    }



}

Я просто хотел написать JPA @query для обновления одного из данных моего столбца, и для этого я хочу передать вызов функции из класса контроллера в тот файл репозитория, который содержит определение функции аннотации @query, которая автоматически преобразуется в спящий режимзапрос через компилятор и, следовательно, в базе данных оракула данные будут обновлены.

Ответы [ 3 ]

0 голосов
/ 04 марта 2019

Для изменения запросов (обновить, удалить, вставить) необходимо использовать аннотацию @Modifying.

Кроме того, ваш запрос ничего не возвращает, поэтому ваш метод, вероятно, должен вернуть void.

И хотя в этом нет необходимости, всегда полезно называть метод в соответствии с тем, что он на самом деле делает.

Все это приводит к:

@Modifying
@Query(value="update USER_REGISTRATION set password = :password WHERE user_name = :user_name and email = :email",nativeQuery=true)
void updatePassword(@Param("password") String password,String user_name,String email);   
0 голосов
/ 04 марта 2019

Обычно поток подобен Controller -> Service -> Dao.Таким образом, вы можете создать Сервис, который будет вызывать соответствующий дао / репозиторий.Также, пожалуйста, проверьте эту ссылку.

0 голосов
/ 04 марта 2019
@Transactional
@Modifying(clearAutomatically = true)
@Query(value="update USER_REGISTRATION set password = ?1 WHERE user_name = ?2 and email = ?3",nativeQuery=true)
void findbyuser_update(String password,String user_name,String email);   

Аннотация @Modifying используется для улучшения аннотации @Query для выполнения не только запросов SELECT, но также запросов INSERT, UPDATE, DELETE и даже DDL.

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