我正在使用 JPA、hibernate 和 Oracle DB。在多次调用方法 findAll(..) 时(比如 1000 次),每次 Oracle 打开一个新游标。在实体管理器事务提交或实体管理器关闭 (lem.close()) 后,打开的游标不会关闭。问题是 oracle 打开 1000 个游标并达到最大打开游标限制并抛出错误 ORA-01000: maximum open cursors exceeded。如何强制 oracle 关闭打开的游标?
public List<T> findAll(Long id1, Long id2, Long id3, boolean cacheResults) {
EntityManager lem = emf.createEntityManager();
lem.getTransaction().begin();
StringBuilder sb = new StringBuilder();
boolean first = true;
List<T> listRowValue = lem.createNativeQuery("select * from MASTER b where id = " + id1 + " and id = " + id2 + " and id = " + id3)
.getResultList();
lem.getTransaction().commit();
lem.close();
return listRowValue;
}