Использование объектов в качестве параметров в репозитории Spring JPA с пользовательскими запросами - PullRequest
0 голосов
/ 24 января 2020

У меня есть какой-то код ниже строк:

public interface User extends JpaRepository<User, Integer> {   
   @Modifying
   @Query(value = "INSERT INTO USER (USER_ID,FIRST_NAME,LAST_NAME) VALUES(:user)", nativeQuery = true)
   void saveUser(@Param("user") User user);
}

Но я получаю исключение ниже:

java.sql.SQLException: Invalid column index
    at oracle.jdbc.driver.OraclePreparedStatement.setIntInternal(OraclePreparedStatement.java:5223) ~[ojdbc-12.1.0.1.jar:12.1.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatement.setInt(OraclePreparedStatement.java:5210) ~[ojdbc-12.1.0.1.jar:12.1.0.1.0]
    at oracle.jdbc.driver.OraclePreparedStatementWrapper.setInt(OraclePreparedStatementWrapper.java:209) ~[ojdbc-12.1.0.1.jar:12.1.0.1.0]
    at org.hibernate.type.descriptor.sql.IntegerTypeDescriptor$1.doBind(IntegerTypeDescriptor.java:46) ~[hibernate-core-5.0.12.Final.jar:5.0.12.Final]

Я заметил, что большинство пользовательских запросов имеют параметры с простыми типами данных , Можно ли вообще использовать объекты?

1 Ответ

0 голосов
/ 25 января 2020

Сделайте это:

@Modifying
   @Query(value = "INSERT INTO USER (USER_ID,FIRST_NAME,LAST_NAME) VALUES(:userID, :firstName, :lastName)", nativeQuery = true)
   void saveUser(@Param("userID") Integer userId, @Param("firstName") String firstName, @Param("lastName") String lastName);

И когда вы вызываете этот метод, сделайте это:

..saveUser(user.getID(), user.getFisrtName(), user.getLastName());
...