Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JPA调用存储过程从2db中选择数据_Java_Mysql_Sql_Hibernate_Jpa - Fatal编程技术网

Java JPA调用存储过程从2db中选择数据

Java JPA调用存储过程从2db中选择数据,java,mysql,sql,hibernate,jpa,Java,Mysql,Sql,Hibernate,Jpa,我正在使用mySql和jee应用程序,使用jpa和hibernate 我有一个存储过程,它从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.tb

我正在使用mySql和jee应用程序,使用jpa和hibernate

我有一个存储过程,它从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();
        }
问题似乎是有来自两个不同数据库的选择,其中em无法处理此操作 如何执行此任务

注意:我也试过了 我试过了
所有人都给出了相同的异常

您似乎在执行存储过程,并期望返回一个结果集:

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
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,情况也是如此。您可以在my here:和

上了解更多关于它的信息。问题是,只有在存储过程成功且无错误的情况下,我才返回一个异常,我检查了db,我发现调用该过程时od
sesId
参数的值是多少?您使用的是什么MySQL版本?我发现了两个MySQL bug,如果您使用受影响的版本,它们可能与此相关:和