sql >> Databáze >  >> RDS >> Mysql

Nelze získat více entit tabulky prostřednictvím uložené procedury pomocí režimu spánku

'Pravidla/omezení pro použití uložených procedur' v dokumentaci hibernace uvádí, že

"Procedura musí vrátit sadu výsledků. Vzhledem k tomu, že tyto servery mohou vracet více sad výsledků a aktualizovat počty, Hibernate iteruje výsledky a jako návratovou hodnotu vezme první výsledek, kterým je sada výsledků. Vše ostatní bude vyřazen." (odkaz:http://docs. jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#sp_query )

Jak bylo uvedeno, druhá sada výsledků ve vašem případě je ignorována.

K získání obou sad výsledků byste museli použít jdbc. Buď pro to můžete vytvořit samostatné třídy, nebo vám hibernace nabízí metody pro provádění tradičních operací jdbc prostřednictvím metod 'doWork' a 'doReturningWork' své relace...

Jednoduchý příklad může být:

List<Object> res = session.doReturningWork(new ReturningWork<List<Object> /*objectType returned*/>() {
            @Override
            /* or object type you need to return to process*/
            public List<Object> execute(Connection conn) throws SQLException 
            {
                CallableStatement cstmt = conn.prepareCall("CALL YOUR_PROCEDURE");
                //Result list that would return ALL rows of ALL result sets
                List<Object> result = new ArrayList<Object>();
                try
                {
                    cstmt.execute();                        

                    ResultSet rs = cstmt.getResultSet(); // First resultset
                    while (rs.next()) {//Read items/rows of first resultset
                        // .
                        // Process rows of first resultset

                        result.add(obj); // add items of resultset 1 to the returning list object
                    }

                    cstmt.getMoreResults(); // Moves to this Statement object's next result, returns true if it is a ResultSet object

                    rs = cstmt.getResultSet(); // Second resultset
                    while (rs.next()) {
                        // .
                        // Process rows of second resultset

                        result.add(obj); // add items of resultset 2 to the returning list object
                    }
                    rs.close();                           
                }
                finally
                {cstmt.close();}

                return result; // this should contain All rows or objects you need for further processing
            }
        });



  1. Jak odstranit uživatele databáze MySQL v cPanel

  2. MYSQL GROUP BY a ORDER BY nefungují společně podle očekávání

  3. Jak uložit pole nebo více hodnot do jednoho sloupce

  4. Jak RPAD() funguje v MariaDB