Spring data jpa,原生查询Hibernate异常
Posted
技术标签:
【中文标题】Spring data jpa,原生查询Hibernate异常【英文标题】:Spring data jpa, native query Hibernate exception 【发布时间】: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 中有没有其他方法可以做到这一点?
请告诉我。
【问题讨论】:
【参考方案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 删除,谢谢以上是关于Spring data jpa,原生查询Hibernate异常的主要内容,如果未能解决你的问题,请参考以下文章