Calling a Stored Procedure in Hibernate

后端 未结 2 392
时光说笑
时光说笑 2020-12-10 22:02

I just started learning hibernate last night and its rather fun. I am some trouble calling a stored procedure as a sql-query with hibernate. I have attached the source and t

相关标签:
2条回答
  • 2020-12-10 22:33

    According to the documentation, the procedure must return a result set and should be called like this:

    { ? = call procedureName(<parameters>) }
    

    So try the following instead:

    <sql-query name="getRecordsSP" callable="true" >
      <return class="Example">
        <return-property name="user_id" column="user_id"></return-property>
        <return-property name="user_data" column="user_data"></return-property>
      </return>
      { ? = call getRecords }
    </sql-query>
    

    References

    • Hibernate Core Reference Guide
      • 16.2.2. Using stored procedures for querying
    0 讨论(0)
  • 2020-12-10 22:39
    import java.sql.CallableStatement;
    import java.sql.ResultSet;
    import java.util.Iterator;
    import java.util.List;
    
    import org.hibernate.Query;
    import org.hibernate.Session;
    import org.hibernate.SessionFactory;
    import org.hibernate.cfg.Configuration;
    
    
    
    public class SelectPP {
    
    
        public static void main(String[] args) {
    
            Session session = null;
            //String query = "select example.id, example.data from Example example";
            CallableStatement callableStatement = null;
            ResultSet resultSet = null;
    
            try{
    
                SessionFactory sessionFactory = new Configuration().configure().buildSessionFactory();
                session = sessionFactory.openSession();
    
                System.out.println("selecting records");
        //      Query q = session.getNamedQuery("getRecordsSP");
        //      Query q =  session.createSQLQuery("call getRecords","",Example.class);
        //      Query q = session.getNamedQuery("getRecordsSP");
    
                callableStatement = session.connection().prepareCall("{call getRecords}");
                callableStatement.execute();
    
                resultSet = callableStatement.getResultSet();
    
                while(resultSet.next()){
                    System.out.println(resultSet.getInt(1));
                    System.out.println(resultSet.getString(2));
                }
    
                //resultSet.
    
                System.out.print("Done");
                //List l = q.list();
    
    
            //  for(Iterator it = l.iterator() ;it.hasNext();){
            //      Object row [] = (Object []) it.next();
    
            //      Example row = (Example) it.next();
            //      System.out.println(row.getUser_id());
            //      System.out.println(row.getUser_data());
            //      System.out.println(row.length);
            //      System.out.println("ID " + row[0]);
            //  System.out.println("Data "+ row[1]);
    
            }
            catch (Exception e) {
                e.printStackTrace();
            }
            finally{
                session.flush();
                session.close();
            }
        }
    }
    

    I basically redesign the input without using hibernate getNamedQuery, but the java.sql class and it worked!!!

    0 讨论(0)
提交回复
热议问题