2012-01-23 40 views
1

我正在开发一个将行插入表的PL/SQL存储过程。该过程可能会在每次调用时写入数以万计的行,这可能需要几分钟才能完成。我还在开发另一个查询V $ SESSION_LONGOPS视图的过程,以获取有关信息,例如完成了多少工作以及大约剩余多少时间以便处理,以便可以将这些信息用于进度栏。用Hibernate和PL/SQL实现进度条

在这里,我不清楚Oracle如何执行操作。我将从Java应用程序中调用两个过程,这些过程必须同时运行。为了实现这种行为,必须使用两个到Oracle的连接?或者一个连接足够了吗?如果使用多个连接,多线程是否会在Oracle会话中自动发生?

我正在使用Hibernate连接到数据库。我也有一些关于应用程序的问题。如果我从两个线程向数据库发送两个查询,Hibernate是否使用连接池中的两个连接来发送查询?第二个查询(将由进度条使用)将在第一个查询(执行插入操作)仍在执行时重复运行。

在此先感谢。

回答

0

Hibernate会话不是线程安全的,所以每个线程都必须有自己的会话。每个会话都使用JDBC连接,因此两个会话都将从该池中获取不同的JDBC连接。

当然,Oracle允许使用两个连接同时访问数据库,否则每个应用程序都会有严重的性能问题。

+0

谢谢JB。我使用Spring将Hibernate实体管理器注入到DAO中。我认为Spring会使用一个实体管理器的线程安全版本。我将不得不回顾Spring产生实体经理的方式。我想它不应该是单身。 –

+0

Spring **提供了一个实体管理器的线程安全版本。为什么不呢? –

+0

真的吗?在那种情况下,如果我使用Spring来注入实体管理器,我将重用连接,对吧? –