hibernate3中没有参数的调用过程

时间:2018-11-02 16:46:22

标签: java oracle hibernate

我使用hibernate3,没有使用JPA 我在oracle中有一个返回2 out参数的过程 为了测试,我使用此查询在oracle中执行此过程。

declare

req_type  number;
req_seq  number;

begin

insert_req(1111,req_type,req_seq);
dbms_output.put_line('req_type='||req_type);
dbms_output.put_line('req_seq='||req_seq);
end;

现在我想使用休眠方式调用此过程

我尝试使用此代码对本地查询进行尝试,但未成功:

public void insertReq(String numEmp) {

                    int req_type  ;
                    int req_seq;


                    String sql = " insert_req(1111,:in1,:in2) ";
                    SQLQuery query = session.createSQLQuery(sql);
                    query.setParameter("in1", req_type); 
                    query.setParameter("in2", req_seq); 
                    List results = query.list();

                    System.out.println(req_type);
                    System.out.println(req_seq);

                    }

当我有一个函数时,可以使用以下代码作为示例使用休眠模式运行它:

public void insertOrder(String numEmp) {

            String query = "call  insert_order(" + numEmp + ",50)";


            SQLQuery sqlQuery = this.getSession().createSQLQuery(query);
            sqlQuery.executeUpdate();

        }

但是问题是如何使用休眠模式调用带有2 out参数的过程。

2 个答案:

答案 0 :(得分:0)

您必须使用CallableStatement和registerOutParameter。 您可以从休眠会话中获得连接并创建callablestatement。 休眠状态并不能提供解决此问题的机制(至少据我所知)。 我希望有帮助。

答案 1 :(得分:0)

尝试一下,让我知道。

EntityManager em = emf.createEntityManager();
em.getTransaction().begin();

Session session = em.unwrap(Session.class);
session.doWork(new Work() {

    @Override
    public void execute(Connection con) throws SQLException {
        // do something useful
        try (CallableStatement stmt = con.prepareCall("{call my_sp()}")) {
            stmt.execute();
        }
    }
});

em.close();

最诚挚的问候。