2015-09-18 43 views
0

我使用MySQL和使用JPA和冬眠JPA稱爲從2分貝

JEE應用存儲過程選擇數據I具有從表中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鱈魚E:

@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無法處理此操作 我怎麼能執行此任務

注:我也嘗試過native named query 我試圖@NamedStoredProcedureQuery 所有人都付出了同樣的異常

+0

當調用過程時,什麼是od'sesId'參數的值?你使用的是什麼MySQL版本?我發現了兩個報告的MySQL錯誤,如果您使用受影響的版本,可能會有所關聯:https://bugs.mysql.com/bug.php?id=15500和http://bugs.mysql.com/bug.php ?id = 25009 –

回答

2

你似乎執行存儲過程,並期望在返回結果集:

query.list(); 

這對我來說似乎不正確,你不會得到任何記錄。嘗試調用它,如果你想運行更新或刪除:

query.executeUpdate(); 
+0

問題是,只有在存儲過程成功且沒有錯誤的情況下才返回異常 我檢查了數據庫並發現了我發現的 – oooss

0

由於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