Я получаю сообщение об ошибке
IllegalStateException: Session / EntityManager закрыт
при использовании StoredProcedureQuery
с хранимой процедурой Oracle и SYS_REFCURSOR
.
Использование Spring Boot + spring-boot-starter-data-jpa
@Repository
public class HibernateTestingDao implements CommandLineRunner {
...
/**
* Conector con la base de datos
*/
@PersistenceContext
private EntityManager entityManager;
/**
* Properties
*/
@Autowired
private CustomYMLFile properties;
/**
* Ejecucion automatica
*/
@Override
public void run(String... args) throws Exception {
log.info("Iniciando la Ejecucion");
procedureSalidaCursor();
log.info("La ejecucion del proceso ha finalizado");
}
/**
* Salida Cursor
*/
private void procedureSalidaCursor() {
log.info("Conectando al procedure : " + properties.getProcedureSalidaCursor());
try {
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
java.sql.Date fechaQuery = new java.sql.Date(df.parse("2017-07-17").getTime());
StoredProcedureQuery query = entityManager
/*
* Procedure a llamar
*/
.createStoredProcedureQuery(properties.getProcedureSalidaCursor())
/*
* Entradas
*/
.registerStoredProcedureParameter(1, Date.class, ParameterMode.IN)
.registerStoredProcedureParameter(2, String.class, ParameterMode.IN)
/*
* Salidas
*/
.registerStoredProcedureParameter(3, void.class, ParameterMode.REF_CURSOR)
/*
* Parametros de entrada
*/
.setParameter(1, fechaQuery) // FECHA
.setParameter(2, "77647538"); // RUT
log.info("Ejecutando Procedure");
query.execute();
log.info("Procedure Ejecutado");
List<Object[]> results = query.getResultList();
log.info("Parametros obtenidos correctamente");
} catch (Exception e) {
log.error("Error al consultar BD , Detalle > ", e);
}
}
....
}
Я получил исключение, когда я делаю это:
List<Object[]> results = query.getResultList();
Если я использую тот же метод, но с процедурами, которые имеют отдельные выходы, все в порядке. но я получил это исключение с курсорами.
Проект GitHub: https://github.com/betray32/HibernateSpring