複数件の依頼に対して、JPAのStoredProcedureQuryを利用して、件数分プロシージャコールを行い登録する処理を実装しています。
全て成功した場合のみ反映させたいので、処理の先頭でbegin、完了したらcommitという作りにしています。
データベースはOracleです。

問題は、StoredProcedureQueryのexecuteメソッドを繰り返しコールすると、その都度カーソルがオープンされてしまい、300に到達した時点でora-01000(最大オープン・カーソル数を超えました。)でエラーになってしまっています。
ちなみに、プロシージャ内の処理を空にしても同様のエラーとなったため、おそらくプロシージャコール自体でカーソルを作成しているものと思われます。

解決方法がございましたら、ご教示ください。Javaコードは以下の通りです。

// Javaコード

try{
    fac = Persistence.createEntityManagerFactory("xxx");
    em = fac.createEntityManager();
    tx = em.getTransaction();

    StoredProcedureQuery spq;
    spq = em.createStoredProcedureQuery("yyyy");
    spq.registerStoredProcedureParameter(1, Object.class, ParameterMode.IN);
    spq.registerStoredProcedureParameter(2, Object.class, ParameterMode.IN);
    spq.registerStoredProcedureParameter(3, Short.class, ParameterMode.OUT);
    spq.registerStoredProcedureParameter(4, Short.class, ParameterMode.OUT);
    tx.begin(); 

    for (List<String> rec : csv) {
        String aa = rec.get(0);
        String bb= rec.get(1);
        spq.setParameter(1, aa);
        spq.setParameter(2, bb);
        // 実行
        spq.execute();

        // エラーチェック
        if(...){
            tx.rollback();
            return;
        }
    }
    tx.commit();
}catch(Exception e){
    throw e;
}finally{
    if(em != null)em.close();
    if(fac != null)fac.close();
}