11

jpa永続化プロバイダーとして、休止状態でSpring Data jpaを使用しています。

アプリケーションでネイティブ クエリを使用しています。いくつかの更新クエリがあり、更新クエリが実行されたときに更新された実際のレコード数を取得したいと考えています。春のデータjpaでこれを行う方法はありますか?

私は現在、以下のアプローチに従っています。

@Modifying
@Query(value="update table x set x_provision = ?1 where x_id = ?2", nativeQuery=true)
int updateProvision(Integer provision, Integer id);

@Transactional はサービス層に追加されます。

ここでの問題は、テーブルが更新されるとカウントが 1 になることです。ただし、行が更新されない場合もあります。この場合もカウントは 1 になります。ただし、更新された実際のレコード数を受け取りたいのですが、0 になることもあります。

私がここで何か間違ったことをしている場合、誰かが私に知らせることができますか?

4

1 に答える 1

4

このクエリの実行に使用される ModifyingExecutor を見ると、

@Override
protected Object doExecute(AbstractJpaQuery query, Object[] values) {
    int result = query.createQuery(values).executeUpdate();
    if (em != null) {
        em.clear();
    }
    return result;
}

次に、更新された要素の数を返すために、ネイティブ JPA インフラストラクチャに委任するだけです。

したがって、これは使用されているデータベースまたは ORM フレームワークの構成に関係している可能性がありますが、それ以外は、作成したクエリは正しい結果を返す必要があります。

于 2013-12-21T18:48:03.157 に答える