Hibernate是在内部使用jdbc还是在内部使用JTA来执行持久化和获取操作?
JDBC和JTA不可互换。JDBC是
Java应用程序用于与数据库进行交互的标准API。JTA是用于跨一个或多个资源管理事务的标准API。对于您的问题,最接近的答案是“内部”,Hibernate使用JDBC与数据库进行交互。
像getCurrentSeessionSession()方法一样,获取与当前JTA事务关联的会话。
不完全是。SessionFactory.getCurrentSession()根据当前会话上下文获取会话。该策略的一种实现是JTA会话上下文,它实质上将会话与JTA事务相关联。JTA事务没有“拥有”
Hibernate会话,因为JTA对Hibernate一无所知,而且说Hibernate在内部使用JTA也不是很正确。它仅具有与JTA集成并使其管理事务的能力。
在这里,我想了解第// tx = session.beginTransaction();行的作用
它以您正在使用的任何事务处理机制开始事务,该机制由使用中的TransactionFactory控制。例如,对于JDBCTransactionFactory,它仅确保自动提交已关闭,以便在事务完成之前不会提交更改。
一旦我们提交了特定的交易,从同一会话创建的所有交易都将被提交一次。
通常情况下,会话仅与一个事务相关联。多次调用Session.beginTransaction()只会返回相同的基础Transaction。
因此,我们试图通过// tx = session.beginTransaction()实现
就是这样:告诉正在管理交易的任何人,您将开始新的交易。这意味着直到commit()或rollback()为止发生的所有事情都应该具有数据库事务的普遍接受的语义。



