【问题标题】:Calling stored procedure from java code using hibernate/jdbc with list of values/objects as parameter使用 hibernate/jdbc 以值/对象列表作为参数从 java 代码调用存储过程
【发布时间】:2013-09-21 17:09:08
【问题描述】:

有没有办法通过 java 代码调用在 SQL 服务器上创建的存储过程,使用 hibernate/jdbc 并将值/对象列表作为参数传递? 如果是,那么我该如何实现? 我知道如何调用存储过程,但到目前为止,我使用的存储过程只传递了几个参数,而不是完整的值列表,因为我打算进行批量更新/插入。 如果我做类似以下的事情,这有意义吗?

getTemplate().getSessionFactory().getCurrentSession().createSQLQuery("CALL proc_insert(:list)").setParameterList("list", objList).executeUpdate();

【问题讨论】:

    标签: java sql-server hibernate stored-procedures jdbc


    【解决方案1】:

    这可能会有所帮助 使用 callableStatement

    String getDBUSERByUserIdSql = "{call getDBUSERByUserId(?,?,?,?)}";
    callableStatement = dbConnection.prepareCall(getDBUSERByUserIdSql);
    callableStatement.setInt(1, 10);
    callableStatement.registerOutParameter(2, java.sql.Types.VARCHAR);
    callableStatement.registerOutParameter(3, java.sql.Types.VARCHAR);
    callableStatement.registerOutParameter(4, java.sql.Types.DATE);
    
    // execute getDBUSERByUserId store procedure
    callableStatement.executeUpdate();
    
    String userName = callableStatement.getString(2);
    String createdBy = callableStatement.getString(3);
    Date createdDate = callableStatement.getDate(4);
    

    更多信息click

    【讨论】:

    • 在上述答案中,要从 Hibernate 会话中访问底层 dbConnection 对象,您可以使用 getTemplate().getSessionFactory().getCurrentSession().connection()
    • 我在这里要做的是一次最多更新 100 条记录。对于每次更新,我都会在历史表中插入一个新行。我完全不知道应该如何处理这种情况。我不知道如何将 100 个值传递给过程以及我将如何更新和插入记录程序,流程。谁能指出我正确的方向?目前我正在通过使用休眠循环(使用 dao.update(obj))一次更新和插入一条记录。
    猜你喜欢
    • 2023-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 1970-01-01
    • 1970-01-01
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多