Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Tidak dapat memperoleh beberapa entitas Tabel melalui prosedur Tersimpan menggunakan hibernasi

'Aturan/batasan untuk menggunakan prosedur tersimpan' dalam dokumentasi hibernasi menyatakan bahwa

"Prosedur harus mengembalikan kumpulan hasil. Perhatikan bahwa karena server ini dapat mengembalikan beberapa kumpulan hasil dan jumlah pembaruan, Hibernate akan mengulangi hasil dan mengambil hasil pertama yang merupakan hasil yang ditetapkan sebagai nilai pengembaliannya. Segala sesuatu yang lain akan dibuang." (referensi :http://docs. jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#sp_query )

Seperti yang dinyatakan, hasil kedua dalam kasus Anda diabaikan.

Anda perlu menggunakan jdbc untuk mendapatkan kedua set hasil. Anda dapat membuat kelas terpisah untuk melakukannya, atau sebagai alternatif, hibernate menawarkan metode untuk melakukan operasi jdbc tradisional melalui metode sesi 'doWork' dan 'doReturningWork'...

Contoh sederhananya adalah:

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. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tabel MySQL ditandai sebagai macet dan perbaikan terakhir (otomatis?) gagal

  2. Mekanisme untuk melacak perubahan skema DB

  3. Apakah mungkin untuk memutakhirkan MySQL di MAMP ke MySQL 5.7?

  4. MySQL dan kemungkinan id yang salah dikembalikan oleh LAST_INSERT_ID()

  5. JSON_CONTAINS() Contoh di MySQL