Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.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 在Hibernate中调用存储过程_Java_Mysql_Hibernate_Stored Procedures_Orm - Fatal编程技术网

Java 在Hibernate中调用存储过程

Java 在Hibernate中调用存储过程,java,mysql,hibernate,stored-procedures,orm,Java,Mysql,Hibernate,Stored Procedures,Orm,我昨晚刚开始学冬眠,它很有趣。我在使用hibernate将存储过程作为sql查询调用时遇到一些问题。我已经附上了源代码和错误,请帮助我。谢谢:) 错误是::: call getRecords} 18:33:41,346 WARN JDBCExceptionReporter:38 - SQL Error: 0, SQLState: S0022 18:33:41,347 ERROR JDBCExceptionReporter:46 - Column 'id0_' not found. 18:33

我昨晚刚开始学冬眠,它很有趣。我在使用hibernate将存储过程作为sql查询调用时遇到一些问题。我已经附上了源代码和错误,请帮助我。谢谢:)

错误是:::

call getRecords}

18:33:41,346  WARN JDBCExceptionReporter:38 - SQL Error: 0, SQLState: S0022
18:33:41,347 ERROR JDBCExceptionReporter:46 - Column 'id0_' not found.
18:33:41,348  WARN JDBCExceptionReporter:38 - SQL Error: 0, SQLState: S0022
18:33:41,349 ERROR JDBCExceptionReporter:46 - Column 'id0_' not found.
18:33:41,349 ERROR JDBCExceptionReporter:38 - Could not execute native SQL query
java.sql.SQLException: Column 'id0_' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2813)
    at org.hibernate.type.IntegerType.get(IntegerType.java:18)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:62)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:53)
    at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:541)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:233)
    at org.hibernate.loader.Loader.doQuery(Loader.java:337)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:167)
    at org.hibernate.loader.Loader.doList(Loader.java:1201)
    at org.hibernate.loader.Loader.list(Loader.java:1186)
    at org.hibernate.loader.SQLLoader.list(SQLLoader.java:121)
    at org.hibernate.impl.SessionImpl.findBySQL(SessionImpl.java:2212)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:85)
    at SelectProc.main(SelectProc.java:28)
org.hibernate.JDBCException: Could not execute native SQL query
    at org.hibernate.impl.SessionImpl.findBySQL(SessionImpl.java:2215)
    at org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:85)
    at SelectProc.main(SelectProc.java:28)
Caused by: java.sql.SQLException: Column 'id0_' not found.
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1075)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:984)
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:929)
    at com.mysql.jdbc.ResultSetImpl.findColumn(ResultSetImpl.java:1144)
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2813)
    at org.hibernate.type.IntegerType.get(IntegerType.java:18)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:62)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:53)
    at org.hibernate.loader.Loader.getKeyFromResultSet(Loader.java:541)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:233)
    at org.hibernate.loader.Loader.doQuery(Loader.java:337)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:167)
    at org.hibernate.loader.Loader.doList(Loader.java:1201)
    at org.hibernate.loader.Loader.list(Loader.java:1186)
    at org.hibernate.loader.SQLLoader.list(SQLLoader.java:121)
    at org.hibernate.impl.SessionImpl.findBySQL(SessionImpl.java:2212)
    ... 2 more

根据文档,该过程必须返回一个结果集,并应按如下方式调用:

{ ? = call procedureName(<parameters>) }
{?=调用过程重命名()}
因此,请尝试以下方法:

<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>

{?=调用getRecords}
工具书类
  • Hibernate核心参考指南

我基本上没有使用hibernate getNamedQuery重新设计输入,但是java.sql类和它工作了

{?=call getRecords()}语法需要一个参数。存储过程不接受任何参数。@ferronrsmith然后删除括号?仍然不工作,很糟糕,我用另一种方式编写了它,无论如何谢谢
{ ? = call procedureName(<parameters>) }
<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>
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();
        }
    }
}