我在SQL服务器中有一个函数,我想从hibernate调用它。 我已经测试了这两种方法,但没有人成功。 第一种方法:
Session sixSession=HibernateUtil.getSessionFactory().openSession();
Query q2=sixSession.createQuery("from dbo.old_remaining(?)").setParameter("paymentVcode", p_Vcode);
q2.getNamedParameters();
List list=sixSession.getNamedQuery("{dbo.old_remaining(?)}").setString(1,"p_Vcode").list();
dbo.old_remaining是我的函数,p_Vcode是一个int
错误是:
unexpected token: ( near line 1, column 23 [from dbo.old_remaining(?)]
第二种方法:
Float var;
List li=session.getNamedQuery("{dbo.old_remaining(?)}")
.setString(1, var).list();
错误是: org.hibernate.MappingException:未知的命名查询:{dbo.old_remaining(?)}
请帮助我......
答案 0 :(得分:1)
可以基于CallableStatement提出一个解决方法。这个标准的jdbc语句调用函数:
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
CallableStatement callable = connection.prepareCall("{? = call dbo.old_remaining(?)}");
callable.registerOutParameter( 1, Types.FLOAT );
callable.setString(2, "your string parameter");
callable.execute();
float functionResult = callable.getFloat(1);
}
});
答案 1 :(得分:0)
尝试以下代码
session.doWork(new Work() {
public void execute(Connection conn) throws SQLException {
PreparedStatement pstmt = conn.prepareStatement("SELECT dbo.old_remaining(?)");
pstmt.setString(1,p_Vcode);
ResultSet rs = pstmt.executeQuery();
while( rs.next() )
System.out.println( rs.getFloat(1) ) ;
}
});