我正在 java 中实现从 postgresql 数据库表逻辑中删除语句。但我不断收到各种错误。
一般来说,我的查询如下所示。
@Modifying
@Query(value = "WITH deleted AS (DELETE FROM generated_statements WHERE created_date < :expiryDate RETURNING id) " +
"SELECT count(*) FROM deleted;", nativeQuery = true)
int deleteByIdCreatedDateBefore(LocalDate expiryDate);
但是我得到Executing an update/delete query;嵌套异常是 javax.persistence.TransactionRequiredException:执行更新/删除查询
如果我删除 @Modifying
注释,我会得到: could not extract ResultSet; SQL [不适用];嵌套异常是org.hibernate.exception.SQLGrammarException:无法提取ResultSet
我认为问题出在不正确的注释上。我应该添加@Transactional
吗?我应该如何处理当前的注释?
最佳答案
你需要添加@Transactional注解,这样spring/jpa会为你处理一些事情:这是打开一个新事务,运行你的sql查询,并提交这个事务。
这需要克服以任何方式更新/删除/修改数据时数据损坏的潜在问题。
关于java - postgresql 与 spring data jpa 中的 SQLGrammarException 和 TransactionRequiredException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60926963/