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. Atitit.404错误解决标准流程and url汉字中文路径404错误resin4 resin chinese char path 404 err解决

    Atitit.404错误解决标准流程and 错误resin4 resin chinese char path 404 err解决 1. #原因解析 1 2. #解决方式 2 3. 输出图片流... 2 ...

  2. Atitit。D&D drag&drop拖拽功能c#.net java swing的对比与实现总结

    Atitit.D&D drag&drop拖拽功能c#.net java swing的对比与实现总结 1. 实现一个D&D操作一般包括三个步骤: 1 2. .net黑头的拖曳机制 ...

  3. UIImageView的一些用法

    转自:http://blog.sina.com.cn/s/blog_60e2dbcf01014bfm.html //初始化 UIImageView  *imageView=[[UIImageView ...

  4. 怎么使用Less/Sass编译工具koala

    怎么使用Less/Sass编译工具koala 如何使用Less/Sass编译工具koala 一.SASS调试插件的方法 如需调试功能,请在编译输出的时候输出debug信息,那样解析的css文件中就会包 ...

  5. DRBD 高可用配置详解(转)

    高可用性集群解释:一般是指当集群中有某个节点失效的情况下,其上的任务会自动转移到其他正常的节点上.还指可以将集群中的某节点进行离线维护再上线,该过程并不影响整个集群的运行.今天来做个Heartbeat ...

  6. nginx的root alias 指令

    location /img/ { alias /var/www/image/; } #若按照上述配置的话,则访问/img/目录里面的文件时,ningx会自动去/var/www/image/目录找文件 ...

  7. arduino知识

    如果你买过Adafruit, Sparkfun, Seeedstudio和Arduino Store的Kit,不难发现Arduino官方的无论从包装和印刷上都是最具艺术气质的,其次是Sparkfun, ...

  8. windows下端口占用解决方法-查看和杀死占用端口进程

    在Windows下启动程序时有时会遇到端口被占用的情况,由于一个端口同时只能运行一个进程,所以要想启动新的程序就要先把占用该端口的进程给kill掉,具体的命令分为以下三步, 以杀死占用了80端口的进程 ...

  9. sublime text 3中配置golang开发环境

    1:首先下载 Go源码 https://golang.org/dl/  [根据不同的环境选择] 2:新建文件项目文件夹 存放  D:/Go_project 分别建立  bin  src  pkg  子 ...

  10. android system.img 解压和打包

    system.img重新编译的时间太长,添加和更改的文件系统内容,往往通过对system.img加压再打包的方式. 参考链接 http://blog.csdn.net/whu_zhangmin/art ...