hibernate内部使用jdbc还是内部使用JTA还是可配置的?"

M S*_*ach 7 hibernate

我是hibernate的新手并开始研究hibernate.我将通过JDBC()使用hibernate.我的第一个问题是 hibernate内部使用jdbc还是内部使用JTA来执行持久化和获取操作?但我在这里也可以看到一些JTA,比如getCurrentSeessionSession()方法获取与当前JTA事务关联的会话.问题: - 基本上我想在hibernate中理解JTA和jdbc的作用.

问题2: - 我可以在hibernate的任何操作中看到下面的代码片段

try{ 
session=factory.openSession();
tx=session.beginTransaction();
session.save(myClass);
tx.commit();
}
finally{
session.close();
}
Run Code Online (Sandbox Code Playgroud)

在这里,我想了解行// tx = session.beginTransaction()的作用; 根据理解,每个会话将使用一个连接.因此,即使我们从同一会话启动多个事务,我们也将使用相同的连接.一旦我们提交特定事务,从同一会话创建的所有事务将被提交一次.那么我们用// tx = session.beginTransaction()来实现什么呢??

Rya*_*art 18

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()之前发生的所有事情都应该具有数据库事务的普遍接受的语义.