【问题标题】:Could hibernate be causing this 'fetch out of sequence' error?hibernate 会导致这个“提取乱序”错误吗?
【发布时间】:2020-01-09 17:24:36
【问题描述】:

我正在尝试使用 Hibernate/Spring JPA 执行此查询(在 Oracle 数据库中):

@Query( value = "DELETE from MY_TABLE where ID = :ID", nativeQuery = true)
    void delete(Long ID);

表上有一个 BEFORE DELETE 触发器,它弥补了我无法更改的糟糕的表设计,它围绕从相关表中删除行运行,这样基本 DELETE 不会导致任何外键错误。我很确定这不应该是一个问题,但如果是,请告诉我。

现在,在执行此查询时会导致ORA-01002: fetch out of sequence 错误,根据谷歌的说法,这是在a fetch has been attempted from a cursor which is no longer valid 时引起的。 (为了完全清楚,我没有使用我的查询或触发器启动任何游标)

但是,该行及其所有依赖项实际上已成功删除。因此,我不确定是什么导致了错误,并希望得到帮助

【问题讨论】:

  • @Nitika 答案是正确的,通过接受它来帮助社区,答案解决了我的问题
  • 完成,谢谢提醒

标签: java oracle hibernate


【解决方案1】:

方法应该是:

@Modifying
@Query( value = "DELETE from MY_TABLE where ID = :ID", nativeQuery = true)
    void delete(@Param("ID") Long ID);

试试这个并检查问题是否仍然存在。

【讨论】:

  • 我现在收到javax.persistence.TransactionRequiredException: 异常。调用方法已经包装在@Transactional 中,直接包装删除方法不会改变结果。有趣的是,这些行不再被删除?
  • 你为@Transactional 导入的包名是什么?
  • javax.jdo.annotations.Transactional
  • 您的导入错误。应该是 org.springframework.transaction.annotation.Transactional 导入这个包然后检查。
  • 这是我的问题,只需要确保您也将@Transactional 注解添加到方法中
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2021-07-28
  • 1970-01-01
  • 1970-01-01
  • 2022-12-18
相关资源
最近更新 更多