一尘不染

hibernate是在内部使用jdbc还是在内部使用JTA,或者它是可配置的?”

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();
}

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


阅读 195

收藏
2020-06-20

共1个答案

一尘不染

Hibernate是在内部使用jdbc还是在内部使用JTA来执行持久化和获取操作?

JDBC和JTA不可互换。JDBC是
Java应用程序用于与数据库进行交互的标准APIJTA是用于跨一个或多个资源管理事务的标准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()为止发生的所有事情都应该具有数据库事务的普遍接受的语义。

2020-06-20