为了账号安全,请及时绑定邮箱和手机立即绑定

Session/EntityManager 在使用 StoredProcedureQuery 时关闭

Session/EntityManager 在使用 StoredProcedureQuery 时关闭

鸿蒙传说 2022-11-02 15:40:11
我收到一个错误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_CURSORand 获取数据时必须使用query.getSingleResult()orquery.getResultList(); 如果有输出参数,则必须在此行之后访问。使用query.execute()或不使用query.executeUpdate()时。resultSet



查看完整回答
反对 回复 2022-11-02
  • 1 回答
  • 0 关注
  • 397 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号