Java 在PLSQL Oracle中抛出特定错误消息…在hibernate中捕获?

Java 在PLSQL Oracle中抛出特定错误消息…在hibernate中捕获?,java,oracle,hibernate,stored-procedures,plsql,Java,Oracle,Hibernate,Stored Procedures,Plsql,是否可以在PL/SQL oracle存储过程中抛出特定的错误消息,并在调用时在Hibernate中捕获它?您可以从PL/SQL代码中抛出用户定义的错误消息。在-20000到-20999之间的错误代码是为用户指定的错误消息保留的 您可以通过调用PL/SQL中的raise\u application\u error函数来执行此操作: raise_application_error(-20001, 'Your error code message here'); 这将像普通Oracle错误一样传播

是否可以在PL/SQL oracle存储过程中抛出特定的错误消息,并在调用时在Hibernate中捕获它?

您可以从PL/SQL代码中抛出用户定义的错误消息。在-20000到-20999之间的错误代码是为用户指定的错误消息保留的

您可以通过调用PL/SQL中的
raise\u application\u error
函数来执行此操作:

raise_application_error(-20001, 'Your error code message here');
这将像普通Oracle错误一样传播

编辑:

我不是Hibernate的用户,但我在试图找到答案时发现了这一点,我认为这将引导您走上正确的道路

try 
{
    // some hibernate calls
} 
catch (GenericJdbcException ge) 
{
    if(ge.getCause() != null && ge.getCause() instanceof SQLException) 
    {
        SQLException se = (SQLException)ge.getCause();

        // *****************************************************************
        // NOTE: THIS will be where you check for your customer error code.
        // *****************************************************************
        if(se.getErrorCode() == -20001) 
        {
            // your error handling for this case
        }
        else
        {
            throw ge; // do not swallow unhandled exceptions
        }
    }
    else
    {
        throw ge // do not swallow unhandled exceptions
    }
}

您可以在pl/sql上使用output参数,并使用ParameterMode.OUT在代码中选择输出

创建或替换程序程序(请给出编号)

//呼叫输出

 query.registerStoredProcedureParameter( "pls_out_put", Integer.class, ParameterMode.OUT);`
int result=(整数)query.getOutputParameterValue(“pls_out_put”)


如何在hibernate中捕捉到这一点?
org.hibernate.exception.genericjdbception
是一个hibernate异常()。抓住它,干得好,应该是Enough
    if (result==1){
     message = new FacesMessage(FacesMessage.SEVERITY_INFO, "user defined message", "user defined message");

     FacesContext.getCurrentInstance().addMessage(null, message);
    } else if(result==0) {
         message = new FacesMessage(FacesMessage.SEVERITY_INFO, "User defined message", "user defined message");

         FacesContext.getCurrentInstance().addMessage(null, message);
    }