java
  • spring
  • jpa
  • 2016-04-12 9 views 1 likes 
    1

    私のデータベースでクエリを実行するために、次のコードを使用しました。org.h2.jdbc.JdbcSQLException:メソッドはクエリに対してのみ許可されます

    @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); 
    } 
    

    、その後、私は単にサービス

    @Service 
    public class SalesService { 
    
        @Autowired 
        PurchaseOrderRepository purchaseOrderRepository; 
    public void RejectPurchaseOrder(Long of) { 
    
         purchaseOrderRepository.RejectPO(of); 
        } 
    } 
    

    でこのメソッドを呼び出すが、私はエラーで直面:

    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] 
    

    問題がある、私はちょうど私、executeQueryと呼ばれることがありませんjpaを使用して実行するように依頼してください。どうすれば修正できますか?

    答えて

    2

    JPAが実際にカスタム@queryデータベースの状態を修正するを実行するために、方法等

    代わりの

    @Query(value ="update PURCHASE_ORDER set status='REJECTED' where id=?1", nativeQuery = true) 
    void RejectPO(Long id); 
    
    のexecuteUpdateを使用するようにJPAを伝えるために@Modifyingで注釈を付ける必要があるため、

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

    を試してみてください詳細についてはhttp://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.modifying-queriesを参照してください。あなたがしようとしているどのようなコード

    //Used only when select statement is used . 
    @Query(value ="update PURCHASE_ORDER set status='REJECTED' where id=?1", nativeQuery = true) 
        void RejectPO(Long id); 
    

    のこの行で

    1

    問題はupdateにスキーマを試しているだけ@Query表記を使用しました。

    springが内部でのみ見つかった場合は、executeQuery()メソッドを実行します。これはスキーマの値には使用されません。modifyexecuteQuery()は、selectクエリの実行のみを担当します。クエリ、

    、 、 、

    のように、Queryを更新できるアノテーションをもう1つ追加します。

    @Modifying //add this annotation. 
    @Query(value ="update PURCHASE_ORDER set status='REJECTED' where id=?1", nativeQuery = true) 
        void RejectPO(Long id); 
    
    関連する問題