2010-11-18 159 views
1

我需要从spring(通过Hibernate)调用oracle存储过程。spring&plsql存储过程 - 异常处理和事务

我不熟悉PL/SQL,所以我想知道如何继续。

1)我可以使用spring/hibernate(例如注释)来开始/关闭事务。我认为这不是问题,我不必在存储过程中开始/关闭。

2)在上述顺序我打开和关闭游标,但在例外的情况下,我想将其关闭并重新抛出异常到Java的部分,所以这里是我做了什么:

EXCEPTION 
    WHEN OTHERS THEN 
    CLOSE my_cursor; 
    RAISE e_cannot_do_sth; 

我想提出一个例外,以便让用户知道出了点问题......

这样做的最佳方法是什么?

回答

1
  1. 是的,你可以使用Spring来管理事务。我不认为Hibernate会给你带来很大的优势。

  2. 抛出一个异常,使用以下命令:

    raise_application_error(errno, 'Error Message of your choice');

哪里errno为-20000和-20999之间的一个数。然后在你的Java代码,赶上org.springframework.jdbc.UncategorizedSQLException,拉出根SQLExcection如下:

private SQLException digOutSqlException(UncategorizedSQLException t) { 
    Throwable root = t; 
    while (root.getCause() instanceof SQLException) { 
    return (SQLException)root.getCause(); 
    } 
    return null; 
} 

并调用getErrorCode()上SQLException中,让您的自定义错误PL/SQL错误号。