org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 无效的参数索引 2

Posted

技术标签:

【中文标题】org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 无效的参数索引 2【英文标题】:org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Invalid parameter index 2 【发布时间】:2019-09-03 12:00:34 【问题描述】:

我正在将我的应用程序升级到 java 8、hibernate5 和 spring 4。 有一些现有的 JPQL 查询,其中我使用的 Pageable 在更新后不起作用。 我遇到了异常

2019-09-03 07:55:18,814 [http-nio-8080-exec-1] WARN  org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 07009
2019-09-03 07:55:18,815 [http-nio-8080-exec-1] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Invalid parameter index 2.

我尝试将返回类型从 List 更改为 Page,但没有成功

My POM.xml
<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-core</artifactId>
    <version>5.2.10.Final</version>
</dependency>
<dependency>
    <groupId>org.springframework.data</groupId>
    <artifactId>spring-data-jpa</artifactId>
         <version>1.4.3.RELEASE</version>
</dependency>

Repository 
@Query("select u from UserPasswordHistory as u where u.userId = ?1 order by createDate desc")   
    public List<UserPasswordHistory> findUserPasswordHistroy(Long userId, Pageable page);

Service
public List<UserPasswordHistory> findUserPasswordHistroy(Long userId, int resultLimit)
        try
            Pageable topResult = new PageRequest(0,resultLimit);
            return pwdHistriyRepository.findUserPasswordHistroy(userId,topResult);

Entity
@Entity
@Table(name="user_password_history")
@Configurable(preConstruction = true, autowire = Autowire.BY_TYPE)
public class UserPasswordHistory implements Serializable 
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "seq_id")
    private Long id;

    /**
     */
    @Column(name = "user_id")
    private Long userId;

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

我需要做分页

【问题讨论】:

【参考方案1】:

你可以使用Spring数据仓库魔术方法,这里不需要使用@Query。请尝试:

public interface UserPasswordHistoryRepository extends JpaRepository<UserPasswordHistory, Long> 
    List<UserPasswordHistory> findByUserIdOrderByCreateDateDesc(Long userId, Pageable pageable);

以测试为例:

userPasswordHistoryRepository.findByUserIdOrderByCreateDateDesc(1L, PageRequest.of(0, 2));

【讨论】:

以上是关于org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 无效的参数索引 2的主要内容,如果未能解决你的问题,请参考以下文章

无法初始化 JPA EntityManagerFactory:无法创建请求的服务 [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] - Data truncation: Incorrect datetime value

[org.hibernate.engine.jdbc.spi.SqlExceptionHelper]SQL Error: 1064, SQLState: 42000问题的解决办法

随手记录Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvironment]

关于org.hibernate.engine.jdbc.spi.SqlExceptionHelper - Incorrect string value: 'xE5x91xBCxE5x

配置ssh框架启动tomcat服务器报异常Unable to create requested service [org.hibernate.engine.jdbc.env.spi.JdbcEnvir