我收到一个错误IllegalStateException:会话/EntityManager 已关闭StoredProcedureQuery与 Oracle 存储过程SYS_REFCURSOR和.使用 Spring Boot + spring-boot-starter-data-jpa@Repositorypublic 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) } catch (Exception e) { log.error("Error al consultar BD , Detalle > ", e); } } .... }执行此操作时出现异常:List<Object[]> results = query.getResultList();如果我使用相同的方法,但使用具有单独输出的程序,一切都很好。但我用游标得到了这个例外。github项目:https ://github.com/betray32/HibernateSpring
1 回答

白衣染霜花
TA贡献1796条经验 获得超10个赞
您必须query.execute();
从您的代码中删除;当使用REF_CURSOR
and 获取数据时必须使用query.getSingleResult()
orquery.getResultList();
如果有输出参数,则必须在此行之后访问。使用query.execute()
或不使用query.executeUpdate()
时。resultSet
添加回答
举报
0/150
提交
取消