我想使用存储过程使用hibernate添加和删除层次结构数据。为此,我想首先检查该过程是否存在于数据库中,如果不存在则创建它。我在休眠状态下寻找执行此操作的标准方法,但一无所获。我很好奇,知道使用hibernate创建一个过程是好事,还是有一种更好的方式在hibernate中对分层数据进行操作。
我正在从应用程序中调用Web服务,该应用程序使用存储过程以分层格式返回数据。如果在不知不觉中在运行时删除该过程,我的应用程序将永远无法检索数据。因此,如果程序不存在,我想要创建它。我不确定这是正确的方法吗? 我需要指导...
答案 0 :(得分:0)
您可以按以下方式在Hibernate中调用存储的函数或过程
session.doWork(new Work() {
public void execute(Connection connection) throws SQLException {
CallableStatement call = connection.prepareCall("{ ? = call MYSCHEMA.MYFUNC(?,?) }");
call.registerOutParameter( 1, Types.INTEGER ); // or whatever it is
call.setLong(2, id);
call.setLong(3, transId);
call.execute();
int result = call.getInt(1); // propagate this back to enclosing class
}
});
类似地
int result = session.doReturningWork(new ReturningWork<Integer>() {
@Override
public Integer execute(Connection connection) throws SQLException {
CallableStatement call = connection.prepareCall("{ ? = call MYSCHEMA.MYFUNC(?,?) }");
call.registerOutParameter( 1, Types.INTEGER ); // or whatever it is
call.setLong(2, id);
call.setLong(3, transId);
call.execute();
return call.getInt(1); // propagate this back to enclosing class
}
});