Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Không thể nhận nhiều thực thể Bảng thông qua thủ tục Đã lưu trữ bằng chế độ ngủ đông

'Các quy tắc / giới hạn đối với việc sử dụng các thủ tục được lưu trữ' trong tài liệu ngủ đông nói rằng

"Quy trình phải trả về một tập kết quả. Lưu ý rằng vì các máy chủ này có thể trả về nhiều tập kết quả và số lượng cập nhật, Hibernate sẽ lặp lại kết quả và lấy kết quả đầu tiên là tập kết quả làm giá trị trả về của nó. Mọi thứ khác sẽ là bị loại bỏ. " (tham khảo: http:// docs. jboss.org/hibernate/orm/3.3/reference/en/html/querysql.html#sp_query )

Như đã nêu, tập kết quả thứ hai trong trường hợp của bạn đang bị bỏ qua.

Bạn sẽ cần sử dụng jdbc để nhận cả hai tập kết quả. Bạn có thể tạo các lớp riêng biệt để làm như vậy hoặc cách khác, hibernate cung cấp cho bạn các phương thức để thực hiện các thao tác jdbc truyền thống thông qua các phương thức 'doWork' và 'doReturningWork' của phiên nó ...

Một ví dụ đơn giản có thể là:

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. Làm thế nào để tạo toàn bộ tập lệnh cơ sở dữ liệu trong MySQL Workbench?

  2. Sequelize:Hoặc điều kiện trên nhiều bảng

  3. MySQL CHỌN DISTINCT nhiều cột

  4. Cài đặt MySQL-python

  5. Mysql:Thứ tự kết quả với chọn <tên trường> từ khác với thứ tự kết quả với chọn * từ