hibernate中调用存储过程,如果返回了多个结果集,怎么处理

hibernate中调用存储过程,如果返回了多个结果集,怎么处理,第1张

过程如下:

public Boolean doInHibernate(Session session)

throws HibernateException, SQLException {

try{

Transaction tr = sessionbeginTransaction();

SQLQuery query = sessioncreateSQLQuery("{call CommandAdapter(,,,)}");

querysetString(0,"ls");

querysetInteger(1, machineid);

querysetString(2, param);

querysetInteger(3, 0); //

queryexecuteUpdate();

trcommit();

return true;

}catch(Exception e){

eprintStackTrace();

return false;

}finally{

sessionclose();

}

}

使用hibernate调用带参数返回值的存储过程方法

在调用带参数返回值的方法时,需使用到CallableStatement对象。因此,首先得设法获取一个Connection。

获取Connection 方法:

(1)sessionconnection();//此方法目前已被弃用

(2)SessionFactoryUtilsgetDataSource(sessionFactory)getConnection()

过我在使用SessionFactoryUtilsgetDataSource(sessionFactory)时,一直获取的都是空值,为此参考

SessionFactoryUtils的源代码直接利用ConnectionProvider对象来获取一个Connection实例。

完整代码:

SessionFactory sessionFactory=thisgetSessionFactory();

if (sessionFactory instanceof SessionFactoryImplementor){

ConnectionProvider cp = ((SessionFactoryImplementor) sessionFactory)getConnectionProvider();

try {

CallableStatement statement = cpgetConnection()prepareCall(

"{call MachineDataQuery(,,,,,,,,,,,,,)}");

statementsetInt(1, machineId);

statementsetInt(2, jobId);

statementsetInt(3, partTypeId);

statementsetInt(4, compentId);

statementsetInt(5, opId);

statementsetInt(6, roleId);

statementsetInt(7, userId);

statementsetString(8, sd);

statementsetString(9, ed);

statementregisterOutParameter(10, TypesFLOAT);

statementregisterOutParameter(11, TypesFLOAT);

statementregisterOutParameter(12, TypesFLOAT);

statementregisterOutParameter(13, TypesFLOAT);

statementregisterOutParameter(14, TypesFLOAT);

statementexecute();

Systemoutprintln(statementgetFloat(10));

Systemoutprintln(statementgetFloat(11));

Systemoutprintln(statementgetFloat(12));

Systemoutprintln(statementgetFloat(13));

Systemoutprintln(statementgetFloat(14));

} catch (SQLException e) {

eprintStackTrace();

}finally{

cpclose();

}

}

ps:切记存储过程中不可有多余的print或select语句,否则会抛出异常“commicrosoftsqlserverjdbcSQLServerException: 已生成用于更新的结果集。”

mapping映射配置了吗?实体类有没有实现序列化接口?并且如果您的hibernateSessionFactory不是自动生成的话也需要查看一下SessionFactory的代码。

将你需要 *** 作的那个对象所在的类进行单例化,就是私有化构造函数,不能创建对象,通过公共静态方法 得到内部已经创建好的对象,这样,不管从哪里得到的这个类的对象都是唯一的。

public class test {

private static test t = new test();

/

  @param args

 /

public static void main(String[] args) {

A a = new A();

B b = new B();

C c = CgetC();

Systemoutprintln(ca);

acaozuo(5);

Systemoutprintln(ca);

bcaozuo(10);

Systemoutprintln(ca);

}

}

class A{

C c=CgetC();

public void caozuo(int a)

{

ca=a;

}

}

class B{

C c = CgetC();

public void caozuo(int a)

{

ca=a;

}

}

class C{

int a=0;

private C(){};

private static C c = new C();

public static C getC()

{

return c;

}

}

如果使用Spring的话可以将sessionFactory交给Spring来管理

使用的时候直接用sessionFactorygetCurrentSession()方法来使用。

单独使用hibernate的话可以

SessionFactory sessionFactory=(SessionFactory) new Configuration()configure()buildSessionFactory();

Session session=sessionFactorygetCurrentSession();

以上就是关于hibernate中调用存储过程,如果返回了多个结果集,怎么处理全部的内容,包括:hibernate中调用存储过程,如果返回了多个结果集,怎么处理、怎样判断hibernate配置文件是否读取成功、sessionFactory是否创建成功、java中 多个类 *** 作同一个对象等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/9430094.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-28
下一篇2023-04-28

发表评论

登录后才能评论

评论列表(0条)

    保存