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



能否从单个数据库连接中获得多个事务?

Hibernate中,通常我们只有一个SessionFactory的实例,它在内部从连接池获取DB连接。当我们从SessionFactory获得新的Session时,它是内部获取新的连接池还是跨多个Session共享数据库连接?

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

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

hibernate Session是一个围绕Connection的包装器,它允许您在不直接编写SQL的情况下保存pojo。

因此,hibernate Session是围绕Connection的包装器。

Connections被保存在连接池中。

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

当Hibernate与连接池一起使用时,每当Session需要JDBC连接时,它都会从连接池中分配连接。

会话完成后,它的行为取决于ConnectionReleaseMode。对于Hibernate 3.1,默认的ConnectionReleaseModeAFTER_TRANSACTION(是ON_CLOSE),这意味着Sessiontransaction端(提交或回滚)释放连接回池。

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

你可以从SessionFactory获得任意数量的Session实例。会话不是线程安全的。,您不能在线程之间共享会话。会话惰性获取数据库连接。beginTransaction()仅在有需要时才会导致给定会话的连接加载。

最新更新