Session / EntityManager Закрыто при использовании StoredProcedureQuery - PullRequest
1 голос
/ 01 мая 2019

Я получаю сообщение об ошибке

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...