我想删除一天之前的记录,我在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中还有其他方法吗?
请告诉我。
答案 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