我们可以从单一数据库连接获取多个交易吗?
在 Hibernate 中,我们通常只有 SessionFactory 的单个实例,它在内部从连接池获取数据库连接。当我们从 SessionFactory 获取新的会话时,会在内部获取新的连接池,还是在多个会话之间共享数据库连接 >
答案 0 :(得分:2)
Hibernate是一个ORM,它是SQL数据库和POJO之间的一个层。
连接池提供了一种存储和重用java.sql.Connection
实例的方法,以提高速度和稳健性。
hibernate Session
是Connection
的包装器,以便您可以在不直接编写SQL的情况下保存POJO。
所以hibernate Session
是Connection
的包装器。 Connections
保存在连接池中。
当您调用SessionFactory.openSession
hibernate时,首先从提供的连接池中获取Connection
。然后它会在Session
周围创建一个Connection
并返回它。
将Hibernate与连接池一起使用时,只要Session需要JDBC连接,它就会从池中分配它。
会话完成后,其行为取决于ConnectionReleaseMode
。对于Hibernate 3.1,默认的ConnectionReleaseMode
是AFTER_TRANSACTION
(是ON_CLOSE),这意味着Session
会在transaction
端(提交或回滚)将连接释放回池。< / p>
答案 1 :(得分:0)
SessionFactory无法获得数据库连接。 SessionFactory是线程安全的,加载hibernate.cfg.xml文件,线程可以同时访问它,并为单个数据库请求编译映射的会话和不可变缓存。构建SessionFactory时,将映射所有Entity类。
您可以从SessionFactory获取任意数量的Session实例。会话不是线程安全的,即,您不能在线程之间共享Sessions。会话懒惰地获取数据库连接。 beginTransaction()仅在需要时才会导致给定Session的连接负载,即只有在事务启动时才会加载。