Hibernate如何执行存储过程?

@Override
public Boolean setVarValue(final String processInstanceId, final String varName,
final String varValue) {
return getHibernateTemplate().execute(new HibernateCallback<Boolean>() {
@Override
public Boolean doInHibernate(Session session) throws HibernateException{
Connection conn = null;
CallableStatement callable = null;
boolean flag = false;
try {
conn = getConnection();
callable = conn.prepareCall("{CALL PROCESS_WARN.set_var_value(?,?,?)}");
callable.setString(1, processInstanceId);
callable.setString(2, varName);
callable.setString(3, varValue);
callable.execute();
flag = true;
} catch (Exception e) {
logger.error("execute procedure PROCESS_WARN.set_var_value mistakes !!!");
e.printStackTrace();
} finally {
try {
if (null != callable)
callable.close();
if (null != conn)
conn.close();
if (null != session)
session.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return flag;
}
});
}
、、、、、、、、、、、、、、、、
@Override
public Map<String, String> startProcess(final String warningFormId,
final String operationClassKey, final String cityOrgId) {
return getHibernateTemplate().execute(new HibernateCallback<Map<String,String>>() {
@Override
public Map<String,String> doInHibernate(Session session) throws HibernateException{
Connection conn = null;
CallableStatement callable = null;
Map<String,String> ret = new HashMap<String,String>();
try {
conn = getConnection();
callable = conn.prepareCall("{CALL PROCESS_WARN.START_PROCESS(?,?,?,?,?)}");
callable.setString(1, operationClassKey);
callable.setString(2, warningFormId);
callable.setString(3, cityOrgId);
callable.registerOutParameter(4, oracle.jdbc.OracleTypes.VARCHAR);
callable.registerOutParameter(5, oracle.jdbc.OracleTypes.VARCHAR);
callable.execute();
ret.put("process_instance_id", callable.getObject(4).toString());
ret.put("new_task_id_list", callable.getObject(5).toString());
} catch (Exception e) {
logger.error("execute procedure PROCESS_WARN.START_PROCESS mistakes !!!");
e.printStackTrace();
if(e.getMessage().indexOf("ORA-20012") != -1){
String [] strTemp = e.getMessage().split("#");
String msg = "未设置下一步骤的执行人!";
if(strTemp.length > 1){
msg = strTemp[1];
}
throw new NoAssigneeException(msg);
} } finally {
try {
if (null != callable)
callable.close();
if (null != conn)
conn.close();
if (null != session)
session.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return ret;
}
});
}

Hibernate如何执行存储过程?的更多相关文章

  1. Oracle定时任务执行存储过程备份日志记录表

    写在前面 需求 1.备份系统日志表T_S_LOG, 按照操作时间字段OPERATETIME, 将每天的日志增量备份到另一张表. 思路 1.创建一张数据结构完全相同的表T_S_LOG_BAK作为备份表 ...

  2. Dapper完美兼容Oracle,执行存储过程,并返回结果集。

    Dapper完美兼容Oracle,执行存储过程,并返回结果集. 这个问题,困扰了我整整两天. 刚刚用到Dapper的时候,感觉非常牛掰.特别是配合.net 4.0新特性dynamic,让我生成泛型集合 ...

  3. JAVA使用JDBC技术操作SqlServer数据库执行存储过程

    Java使用JDBC技术操作SqlServer数据库执行存储过程: 1.新建SQLSERVER数据库:java_conn_test 2.新建表:tb_User 3.分别新建三个存储过程: 1>带 ...

  4. Oracle中执行存储过程call和exec区别

    Oracle中执行存储过程call和exec区别 在sqlplus中这两种方法都可以使用: exec pro_name(参数1..); call pro_name(参数1..); 区别: 1. 但是e ...

  5. C#获取执行存储过程的" 返回值"代码

    以下是C#代码: /// <summary> /// 执行存储过程,返回" 返回值" /// </summary> /// <param name=& ...

  6. C#执行存储过程的简化

    下面的方法是我在实际开发中摸索出来的,可以在很大程度上简化调用存储过程的代码. 首先来看一下C#调用存储过程的一般过程:1.打开数据库连接SqlConnection:2.生成一个SqlCommand: ...

  7. MyCat 学习笔记 第十三篇.数据分片 之 通过HINT执行存储过程

    1 环境说明 VM 模拟3台MYSQL 5.6 服务器 VM1 192.168.31.187:3307 VM2 192.168.31.212:3307 VM3 192.168.31.150:  330 ...

  8. 原生jdbc执行存储过程

    //定时任务,结转 . //表名 fys_sch_lvyou2 ,存储过程名:fys_sch_lvyou2_carrayover //无参调用:{call insertLine} //有参调用:{ca ...

  9. 0327定时执行--存储过程--dbms_job--dbms_scheduler.create_job

    --oracle job 定时执行 存储过程 --建一张测试表 create table Person( name ), sex ) ); / --创建测试的存储过程 create or replac ...

随机推荐

  1. 使用原生SQL返回实体类具体实现详情

    注:可以直接复制粘贴,欢迎提出各种问题,谢谢! 因为网上查询大都是相同的,自己做时发现很多不懂,摸索了很久才弄懂,所以写了这个例子,比较容易看懂吧. 使用原生SQL查询并将结果返回实体中: (1)因为 ...

  2. Java模拟公司置办货物系统(二)

    採用MVC风格,将数据写入文件,模拟公司置办货物系统.  A类表示普通员工,B类表示部门精力,C类表示採购部,D类表示资源管理部. 订单状态 1.表示申请状态 2.表示通过审批 3.表示未通过审批 4 ...

  3. 11个常用的Linux命令

    Linux命令行吸引了大多数Linux爱好者.一个正常的Linux用户一般掌握大约50-60个命令来处理每日的任务.今天为你解释下面几个命令:sudo.python.mtr.Ctrl+x+e.nl.s ...

  4. 02、Universal app 中按钮图标使用

    前言,windows10 昨天凌晨发布了,windows store 开发模型比以前的 silverlight 模型由很多优势, 我也小兴奋了一把. 正文: 在 windows phone 8.0 以 ...

  5. js基本知识3

    1. 函数 function 函数的声明 函数的 调用 函数的传参 2. 函数返回值 Return 返回结果 返回给函数 Id 函数 function $id(id) { return documen ...

  6. C++中常函数内部的this指针也是const类型的

    代码中碰到一个奇怪的现象,在同样的函数中调用this指针,结果却有一个无法通过编译 // 读取连接信息 void ThirdWizardPage::ReadConnection() { QFile f ...

  7. java strtus2 拦截器(Interceptors)

    在strtus2 中有一个比较重要的东西就是拦截器(Interceptors) 拦截器可以做到在已有的业务中插入一块共通的,比如在一个业务中,直接插入一串登录功能,就不用去每个页面一个个去显示是否登录 ...

  8. Hibernate Annotation 字段 默认值

    http://emavaj.blog.163.com/blog/static/133280557201032262741999/ ——————————————————————————————————— ...

  9. JAVASCRIPT+DHTML实现表格拖动

    自已做的,本来想在网上找前辈们做的,可是总找不到这种例子,要么找出来的太复杂, 要么就没法用,索性自己写了一个.看看还可以用!贡献出来,估计和我一样的菜鸟用的着! <html> <s ...

  10. 【mysql】一次有意思的数据库查询分析。

    本文是在做一家汽车配件的电商网站时,大体情景是一个List.php页面,该页面分页列出部分配件并统计总数量用于分页. 当然该页面中也可以指定一下查询条件,如适配的车辆品牌.车系.排量.年份等,一件商品 ...