【发布时间】:2019-04-30 21:52:31
【问题描述】:
我遇到了一个错误
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();
如果我使用相同的方法,但使用具有单独输出的程序,一切都很好。但我用游标遇到了这个异常。
【问题讨论】:
标签: java spring hibernate spring-boot jpa