【问题标题】:Spring data jpa, native query Hibernate exceptionSpring data jpa,原生查询Hibernate异常
【发布时间】:2017-04-21 14:47:27
【问题描述】:

我想删除一天前的记录,我在 Spring data JPA 中使用 SQL 查询,如下所示:

@Query(value = "delete from tableName data where data.CREATION_DATE < TRUNC(SYSDATE) - 1", nativeQuery = true)
    void deleteRecordsOlderThanYesterday();

我遇到了异常:

原因:org.springframework.orm.jpa.JpaSystemException:无法提取结果集元数据 原因:org.hibernate.HibernateException:无法提取结果集元数据

原因:java.sql.SQLSyntaxErrorException: ORA-00900: 无效的 SQL 语句

上面的代码有什么问题,或者在 HQL 中有没有其他方法可以做到这一点?

请告诉我。

【问题讨论】:

    标签: sql spring-data-jpa


    【解决方案1】:

    每当您从 SQL 语句(UPDATE、DELETE)定义查询时,您都需要使用@Modifying 注释(来自org.springframework.data.jpa.repository)。试试这个:

    @Modifying
    @Query(value = "delete from tableName data where data.CREATION_DATE < TRUNC(SYSDATE) - 1", 
            nativeQuery = true)
    void deleteRecordsOlderThanYesterday();
    

    【讨论】:

    • @infiniteRefactor...谢谢你的回答,我认为你是对的,在我的系统上检查你的答案后我会接受你的答案
    【解决方案2】:

    你最好使用 JpaRepository 并使用 findByStartDateBefore 而你不需要使用@Query

     public List<yourResult> findByStartDateBefore(Date date);
    

    更多信息可以查看spring dochttp://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html

    还有这个问题Object Recovery via a date with spring data

    【讨论】:

    • 你好 Azzabi,我可以使用 deleteByCreationDateBefore 删除,谢谢
    猜你喜欢
    • 2020-01-11
    • 2018-03-17
    • 2019-12-01
    • 2020-02-15
    • 2021-02-13
    • 2017-12-13
    • 2018-02-04
    • 2019-05-03
    • 2013-11-13
    相关资源
    最近更新 更多