簡體   English   中英

JPA調用存儲過程從2 db中選擇數據

[英]JPA called stored procedure selecting data from 2 db

我正在使用jpa和hibernate的mySql和jee應用程序

我有一個存儲過程,該過程從db1中的表中刪除數據,然后從db2中的表中選擇數據,並將其插入db1中的表中

CREATE PROCEDURE `update_data`(myId int(11))
BEGIN
    DELETE FROM db1.tbl1
    WHERE db1.tbl1.id = myId;

    INSERT INTO
    db1.tbl1
    SELECT * FROM
    db2.tbl1
    WHERE db2.tbl1.id = myId;
END

在sql中調用時成功從jpa調用時返回異常

ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-17) ResultSet is from UPDATE. No Data.
ERROR [stderr] (default task-17) org.hibernate.exception.GenericJDBCException: could not execute query

JAVA代碼:

@PersistenceContext(name = "db2", unitName = "db2")
EntityManager em;

org.hibernate.Session session = (org.hibernate.Session) em.getDelegate();

        Transaction tx = null;
        tx = session.beginTransaction();
        try {
            Query query = session
                    .createSQLQuery("CALL update_teachers(:sesId)")
                    .addEntity(Teacher.class).setParameter("sesId", sesId);
            query.list();
            session.flush();
            session.clear();

            tx.commit();
        } catch (HibernateException e) {
            if (tx != null)
                tx.rollback();
            e.printStackTrace();
        } finally {
        session.close();
        }

問題似乎是從2個不同的數據庫中選擇了em無法處理此操作的方法,我該如何執行此任務

注意:我也嘗試了本機命名查詢 ,也嘗試了@NamedStoredProcedureQuery All都給出了相同的異常

您似乎執行了存儲過程,並期望返回一個結果集:

query.list();

這對我來說似乎不正確,您不會獲得任何記錄。 嘗試調用它,就像您要運行更新或刪除一樣:

query.executeUpdate();

正如Sva.Mu已經寫的那樣,存儲過程調用會引發異常,因為如果您使用,實體管理器會期望調用結果

query.list();

您可以在錯誤消息的此部分中看到它

ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-17) ResultSet is from UPDATE. No Data.

如果您改為使用該呼叫,則該呼叫應該正常工作

query.executeUpdate()

在這種情況下,實體管理器將不會從存儲過程調用中獲得任何結果。

如果使用@NamedStoredProcedureQuery或更動態的StoredProcedureQuery,則相同。 您可以在這里閱讀有關此內容的更多信息: @NamedStoredProcedureQueryStoredProcedureQuery

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM