我们可以为单个数据库连接提供多个并行事务吗?

时间:2014-07-14 13:21:20

标签: java sql database hibernate

我们可以从单一数据库连接获取多个交易吗?

  

Hibernate 中,我们通常只有 SessionFactory 的单个实例,它在内部从连接池获取数据库连接。当我们从 SessionFactory 获取新的会话时,会在内部获取新的连接池,还是在多个会话之间共享数据库连接 >

2 个答案:

答案 0 :(得分:2)

Hibernate是一个ORM,它是SQL数据库和POJO之间的一个层。

连接池提供了一种存储和重用java.sql.Connection实例的方法,以提高速度和稳健性。

hibernate SessionConnection的包装器,以便您可以在不直接编写SQL的情况下保存POJO。

所以hibernate SessionConnection的包装器。 Connections保存在连接池中。

当您调用SessionFactory.openSession hibernate时,首先从提供的连接池中获取Connection。然后它会在Session周围创建一个Connection并返回它。

将Hibernate与连接池一起使用时,只要Session需要JDBC连接,它就会从池中分配它。

会话完成后,其行为取决于ConnectionReleaseMode。对于Hibernate 3.1,默认的ConnectionReleaseModeAFTER_TRANSACTION(是ON_CLOSE),这意味着Session会在transaction端(提交或回滚)将连接释放回池。< / p>

答案 1 :(得分:0)

SessionFactory无法获得数据库连接。 SessionFactory是线程安全的,加载hibernate.cfg.xml文件,线程可以同时访问它,并为单个数据库请求编译映射的会话和不可变缓存。构建SessionFactory时,将映射所有Entity类。

您可以从SessionFactory获取任意数量的Session实例。会话不是线程安全的,即,您不能在线程之间共享Sessions。会话懒惰地获取数据库连接。 beginTransaction()仅在需要时才会导致给定Session的连接负载,即只有在事务启动时才会加载。