java—在spring存储库jpa中使用对象作为参数并进行自定义查询

syqv5f0l  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(413)

我有一个代码如下:

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]

我发现大多数定制查询都有简单数据类型的参数。有可能使用对象吗?

sf6xfgos

sf6xfgos1#

请执行以下操作:

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

相关问题