当前位置: 首页 > 知识库问答 >
问题:

方法只允许用于查询。使用execute或executeUpdate代替executeQuery。Java/Spring[重复]

连正信
2023-03-14

我有我的存储库,其中有以下功能:

@Query(nativeQuery = true, value = "DELETE FROM credit_account WHERE ccid = :ccid")
void deleteAllByccid(
        @Param("ccid") Long ccid
);

当我触发此函数时,我得到错误:

org.h2.jdbc.JdbcSQLNonTransientException: Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery; SQL statement:
DELETE FROM credit_account WHERE ccid = ? [90002-200]

如果这些信息有用的话,我在ccid上加入了这个表(ccid代表公司客户id),它看起来是这样的。但同时,我也可以使用此列进行选择,而且效果很好:

@ManyToOne
@JoinColumn(name = "ccid")
private CompanyClient companyClient;

我明白了,我需要使用执行执行更新,但我只是学习它,我试图在互联网上找到它,但没有找到任何东西。那么,我该如何修复这个错误呢?感谢答案!

以下是回购协议的完整代码:

package com.bankapp.bankwebapplication.repositories;

import com.bankapp.bankwebapplication.models.DebitAccount;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import java.util.List;
import java.util.Optional;

public interface DebitAccountRepository extends CrudRepository<DebitAccount, Long> {
    Optional<DebitAccount> findById(Long id);
    List<DebitAccount> findAll();
    List<DebitAccount> findAllById(Long id);

    @Query(nativeQuery = true, value = "SELECT * FROM debit_account WHERE ccid = :ccid")
    List<DebitAccount> findAllByccid(
            @Param("ccid") Long ccid
    );

    @Query(nativeQuery = true, value = "SELECT * FROM debit_account WHERE pcid = :pcid")
    List<DebitAccount> findAllBypcid(
            @Param("pcid") Long pcid
    );

    @Modifying
    @Query(nativeQuery = true, value = "DELETE FROM debit_account WHERE ccid = :ccid")
    void deleteAllByccid(
            @Param("ccid") Long ccid
    );

    @Modifying
    @Query(nativeQuery = true, value = "DELETE FROM debit_account WHERE pcid = :pcid")
    void deleteAllBypcid(
            @Param("pcid") Long pcid
    );
}

共有1个答案

甄志
2023-03-14

你可以看到你的问题的答案已经在这里得到了回答。

org.h2.jdbc.JdbcSQLExc0019:方法只允许用于查询

 类似资料:
  • 我使用以下代码在我的数据库上运行查询。 然后我在服务中调用这个方法 但我面临一个错误: 问题是,我从来没有调用,我只是要求使用运行它。那我该怎么解决呢?

  •  executeQuery方法用于执行产生单个结果集的SQL语句,如SELECT语句。executeQuery方法不能执行INSERT、UPDATE、DELETE以及DDL语句,如果执行这些语句,executeQuery将抛出SQLException异常。executeQuery方法的定义如下: ResultSet executeQuery(String sql) throws SQLExcept

  • 由于execute方法可以执行任何SQL语句,因此,execute方法并不直接返回ResultSet对象,而是通过一个boolean类型的值确定执行的是返回结果集的SQL语句(如SELECT),还是不返回结果集的SQL语句(如INSERT、UPDATE等)。execute方法的定义如下: boolean execute(String sql) throws SQLException; 其中参数sq

  • 我有以下发帖方法, 我正在使用fiddler发布以下请求, 注意:还没有为spring配置安全性。

  • 问题内容: 现在我要使用 但这行不通,有什么想法吗? 问题答案: SQL不支持表名使用变量/ etc-支持您要求的唯一方法是使用动态SQL: