Spring数据jpa,本机查询Hibernate异常

时间:2017-04-21 14:47:27

标签: sql spring-data-jpa

我想删除一天之前的记录,我在Spring数据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中还有其他方法吗?

请告诉我。

2 个答案:

答案 0 :(得分:6)

每当您从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();

答案 1 :(得分:1)

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

 public List<yourResult> findByStartDateBefore(Date date);

有关详细信息,请参阅spring doc http://docs.spring.io/spring-data/jpa/docs/1.3.4.RELEASE/reference/html/jpa.repositories.html

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