[英]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,則相同。 您可以在這里閱讀有關此內容的更多信息: @NamedStoredProcedureQuery和StoredProcedureQuery
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.