使用Hibernate异步执行存储过程

时间:2016-01-08 11:35:35

标签: java hibernate hibernate-4.x

是否可以使用Hibernate异步调用存储过程?在查询继续在PostgreSQL的后台运行时,应在触发存储过程后释放已使用的连接。然后,存储过程应该将结果写入专用表中,以后我们可以从中收集它。主要动机是防止c3p0连接池的连接耗尽。

2 个答案:

答案 0 :(得分:0)

我不确定你能用Hibernate做到这一点。如果您调用该过程,程序中的流量控制将暂停直至完成。但是,您可以尝试使存储过程异步。这样当你用hibernate进行调用时,它会要求数据库启动一个异步作业,你的连接将立即释放。您还必须进行一些查询以了解您的存储过程是否已完成。

答案 1 :(得分:0)

JDBC内部不支持异步执行,因此Hibernate也不提供这样的功能。如果要直接从长时间运行的存储过程调用返回,则希望在单独的线程中进行此调用,甚至可以使用ThreadPoolExecutor。这将允许您继续最初触发呼叫的线程。在这种情况下,您很可能也会在执行线程中处理存储过程的结果,而不是写入临时表然后从那里读取。但是,这取决于您的用例。 但是,您需要连接,因此它不会帮助您耗尽池中的连接。这是一个实际问题吗?您是否正确配置了c3po池以及底层数据库?