我有我的存储库,其中有以下功能:
@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
);
}
你可以看到你的问题的答案已经在这里得到了回答。
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: