java - postgresql 与 spring data jpa 中的 SQLGrammarException 和 TransactionRequiredException

标签 java postgresql spring-data-jpa

我正在 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/

相关文章:

java - 如何在 JTextArea 中换行

java - LambdaJ forEach 集合

sql - 用另一个表的数据替换占位符值

spring - 如何在 Spring Data 中使用 OrderBy 和 findAll

java - Oracle 的 Hibernate 方言 19

mysql - 存储实体时出现 DataIntegrityViolationException

java - 如何在 Java 中修改 OpenOffice.org Draw 图表?

java - EditText 中的自动日期和时间 - Android

postgresql - 触发器自动更新postgresql中的列

sql - 从异常中提取用户定义的错误消息