Hibernate调用存储过程返回值问题
一个存储过程的示例,数据库是informixCREATEFUNCTIONinformix.a()RETURNINGVARCHAR(20),VARCHAR(20),VARC...
一个存储过程的示例,数据库是informix
CREATE FUNCTION informix.a
()
RETURNING VARCHAR(20),VARCHAR(20),VARCHAR(20),VARCHAR(20)
begin
define a varchar(20);
define b varchar(20);
define c varchar(20);
define d varchar(20);
let a = "a";
let b = "b";
let c = "c";
let d = "d";
RETURN a,b,c,d;
end;
END FUNCTION;
hibernate的方法
@Override
public List sqlQuery(String sql) {
SQLQuery result = getHibernateTemplate().getSessionFactory()
.getCurrentSession().createSQLQuery(sql);
return result.list();
}
============================================
这里遇到一个奇怪的问题,我在存储过程中如果仅仅返回1-2个返回值,调用sqlQuery能取到返回值,但是如果返回值在3个以上时(比如现在为4个),返回的list中取到的Object[]的所有值就变成了最后一个参数的值。
比如如果我仅返回a,b两个参数,则Object[] = {a,b};没有问题
但是如果我返回4个参数,预期的Object[] = {a,b,c,d},但是实际为{d,d,d,d}
实在是百思不得其解,请hibernate大神出现,难道这是一个hibernate的bug ????
注:如果能帮我解决此问题,我会加分的。谢谢
自己探索了一下,应该和hibernate在sqlQuery中对数据库相关存储过程的一些限制有关,我已放弃了这种用法,改用CallableStatement来处理存储过程了。 展开
CREATE FUNCTION informix.a
()
RETURNING VARCHAR(20),VARCHAR(20),VARCHAR(20),VARCHAR(20)
begin
define a varchar(20);
define b varchar(20);
define c varchar(20);
define d varchar(20);
let a = "a";
let b = "b";
let c = "c";
let d = "d";
RETURN a,b,c,d;
end;
END FUNCTION;
hibernate的方法
@Override
public List sqlQuery(String sql) {
SQLQuery result = getHibernateTemplate().getSessionFactory()
.getCurrentSession().createSQLQuery(sql);
return result.list();
}
============================================
这里遇到一个奇怪的问题,我在存储过程中如果仅仅返回1-2个返回值,调用sqlQuery能取到返回值,但是如果返回值在3个以上时(比如现在为4个),返回的list中取到的Object[]的所有值就变成了最后一个参数的值。
比如如果我仅返回a,b两个参数,则Object[] = {a,b};没有问题
但是如果我返回4个参数,预期的Object[] = {a,b,c,d},但是实际为{d,d,d,d}
实在是百思不得其解,请hibernate大神出现,难道这是一个hibernate的bug ????
注:如果能帮我解决此问题,我会加分的。谢谢
自己探索了一下,应该和hibernate在sqlQuery中对数据库相关存储过程的一些限制有关,我已放弃了这种用法,改用CallableStatement来处理存储过程了。 展开
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询