在PLSQL Oracle中抛出特定的错误消息…在hibernate中捕获?
是否可以在PL / SQL oracle存储过程中抛出特定的错误消息,并在调用时在Hibernate中捕获它?
您可以从PL / SQL代码中抛出用户定义的错误消息。 -20000至-20999之间的错误代码保留用于用户指定的错误消息。
您可以通过调用PL / SQL中的raise_application_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上使用输出参数,并使用ParameterMode.OUT在代码中选择输出
CREATE OR REPLACE过程proc(pls_out_put out number);
//调用输出
query.registerStoredProcedureParameter( "pls_out_put", Integer.class, ParameterMode.OUT);`
int result =(Integer)query.getOutputParameterValue(“pls_out_put”);
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); }
- Hibernate PersistentSet remove()操作不起作用
- 使用java和hibernate进行数据“安全性”
- 如何根据给定的模式重新排列列表中的项目?
- 序列化到json响应时避免hibernate延迟初始化exception的更好方法
- 在没有注释的情况下将Hibernate迁移到JPA
- JDBC批处理操作的理解
- 无法解析 – org.dom4j.DocumentException:org.dom4j.DocumentFactory无法强制转换为org.dom4j.DocumentFactory
- 数据库约束违规不会在Hibernate中抛出exception
- 如何在oibernate中将oracle timestamp映射到适当的java类型?