有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在Spring Repository JPA中使用对象作为参数进行自定义查询

我有一个大致如下的代码:

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) 个答案

  1. # 1 楼答案

    这样做:

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