org.h2.jdbc.JdbcSQLException:方法仅允许查询

Jef*_*eff 3 java spring jpa

我使用以下代码在我的数据库上运行查询.

@Repository
public interface PurchaseOrderRepository extends JpaRepository<PurchaseOrder, PurchaseOrderID> {

    @Query(value ="update PURCHASE_ORDER   set status='REJECTED'   where id=?1", nativeQuery = true)
    void RejectPO(Long id);
}
Run Code Online (Sandbox Code Playgroud)

然后我只是在服务中调用此方法

@Service
public class SalesService {

    @Autowired
    PurchaseOrderRepository purchaseOrderRepository;
public void RejectPurchaseOrder(Long of) {

        purchaseOrderRepository.RejectPO(of);
    }
}
Run Code Online (Sandbox Code Playgroud)

但我面临一个错误:

org.h2.jdbc.JdbcSQLException: Method is only allowed for a query. Use execute or executeUpdate instead of executeQuery; SQL statement:
update PURCHASE_ORDER   set status='REJECTED'   where id=? [90002-191]
Run Code Online (Sandbox Code Playgroud)

问题是,我从来没有打电话executeQuery,我只是要求使用它来运行它jpa.那么我该如何解决呢?

Lau*_*nzo 9

为了让JPA实际运行修改数据库状态的自定义@Query,必须使用@Modifying注释该方法以告诉JPA使用executeUpdate等.

代替

@Query(value ="update PURCHASE_ORDER   set status='REJECTED'   where id=?1", nativeQuery = true)
void RejectPO(Long id);
Run Code Online (Sandbox Code Playgroud)

尝试

@Modifying
@Query(value ="update PURCHASE_ORDER   set status='REJECTED'   where id=?1", nativeQuery = true)
void RejectPO(Long id);
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅http://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queries.