使用休眠的存储过程

时间:2018-10-13 21:07:18

标签: java hibernate stored-procedures

我想使用存储过程使用hibernate添加和删除层次结构数据。为此,我想首先检查该过程是否存在于数据库中,如果不存在则创建它。我在休眠状态下寻找执行此操作的标准方法,但一无所获。我很好奇,知道使用hibernate创建一个过程是好事,还是有一种更好的方式在hibernate中对分层数据进行操作。

我正在从应用程序中调用Web服务,该应用程序使用存储过程以分层格式返回数据。如果在不知不觉中在运行时删除该过程,我的应用程序将永远无法检索数据。因此,如果程序不存在,我想要创建它。我不确定这是正确的方法吗? 我需要指导...

1 个答案:

答案 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
  }
});