昨晚我刚刚开始学习hibernate,它相当有趣。我在使用hibernate将存储过程作为sql查询调用时遇到麻烦。我已附上来源和错误,请帮助我。谢谢 :)
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="Example" table="example">
<id name="user_id" column="id" >
<generator class="increment"/>
</id>
<property name="user_data">
<column name="data"/>
</property>
</class>
<!-- sql-query must be after class -->
<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>
</hibernate-mapping>
这是Java文件:::
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 SelectProc {
public static void main(String[] args) {
Session session = null;
//String query = "select example.id, example.data from Example example";
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);
System.out.print("Done");
List l = q.list();
for(Iterator it = l.iterator() ;it.hasNext();){
Object row [] = (Object [])it.next();
System.out.println(row.length);
// System.out.println(row[0]);
// System.out.println("ID " + row[0]);
// System.out.println("Data "+ row[1]);
}
}
catch (Exception e) {
e.printStackTrace();
}
finally{
session.flush();
session.close();
}
}
}
错误是:::
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
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();
}
}
}
我基本上不使用hibernate的getNamedQuery重新设计输入,但是java.sql类可以正常工作!
我有一个在包中定义的存储过程。该过程接受两个参数,一个是游标: 我是这样调用这个过程的: 它将返回以下错误: 你好,阿尼尔班。
问题内容: 我试图在postgres 9.3上使用sql调用函数内的函数。 这个问题与我的另一篇文章有关。 我写了下面的函数。到目前为止,我还没有合并任何类型的save-output(COPY)语句,因此我试图通过创建嵌套函数print-out函数来解决此问题。 以上功能有效。 尝试创建嵌套函数。 调用嵌套函数。 输出 上面给出了这个。但是,当在print_out()中将arg1,arg2替换为’
问题内容: 我在任何地方都找不到此答案,但是可以从MySQL中的另一个存储过程调用存储过程吗?我想找回标识值,并在父存储过程中使用它。我们不能再使用FUNCTIONS! 问题答案: 参数应该可以帮助您将值返回给调用过程。基于此,解决方案必须是这样的。
我在Mysql中创建了一个存储过程,并尝试使用J2EE/Hibernate调用该存储过程。在执行存储过程时,其显示me错误。 2018年03月04日上午12:06:18 org.hibernate.engine.jdbc.spi.SqlExceptionHelper logExceptions错误:找不到列“ID”。 执行SP:org.hibernate.exception.sqlgrammare
我刚开始冬眠。我试图通过Hibernate调用oracle存储过程。我可以按照一些步骤通过Hibernate调用过程吗。 提前谢了。