我使用以下代码在我的数据库上运行查询.
@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
.那么我该如何解决呢?
为了让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.