当前位置: 首页 > 面试题库 >

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

康锦
2023-03-14
问题内容

我刚接触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();实现什么??


问题答案:

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



 类似资料:
  • 直到今天,我才知道java有堆,堆是由JVM创建的。此外,这个内存是由操作系统分配给JVM实例的,即堆驻留在JVM实例中。 这表明,JVM和堆相距甚远。 所以,我现在很困惑,有谁能让我知道,我以前是错的还是我不能理解这幅画?

  • 问题内容: 我相信在AS3中,您应该在循环外初始化所有变量,以提高性能。JavaScript也是如此吗?哪个更好/更快/最佳实践? 要么 问题答案: 有 绝对没有区别 意义还是性能,在JavaScript或ActionScript。 是解析器的指令,而 不是 运行时执行的命令。如果在函数体(*)中的任何位置一次或多次声明了特定的标识符,则该标识符在块中的所有使用将引用局部变量。声明是在循环内部,循

  • 我使用useAuthState()钩子从“react firebase hooks/auth”进行身份验证。我很想知道它是如何工作的。它是存储cookie并在注销后清除,还是每次都请求firebase?如果是这种情况,它是如何获取某个特定人员登录的引用的,我的意思是它在请求中传递了什么参数(如uid、email)以及它是如何获得的。 https://i.stack.imgur.com/XiCQp.

  • 问题内容: 以下代码段是否会降低性能? 还是这段代码实际上更有意义? 如果在字节码中这两个完全相等,那么显然第一种方法在样式方面看起来更好,但我想确保确实如此。 问题答案: 在当今的编译器中,没有。我在最小范围内声明对象,因为对于下一个家伙而言,它更具可读性。

  • 根据游戏控制台,内部测试轨道未激活,但已经5天了。 这不是问题所在: 所有应用程序的详细信息都已填写,游戏控制台显示该应用程序可供内部测试人员使用 我已登录到内部测试人员列表中的谷歌帐户 发布时间超过五天,因此应在处理过程中完成发布 选择加入链接可用

  • 问题内容: 我有一本字典, 我想在Cython nogil函数中使用此词典。因此,我试图将其声明为 到这个阶段还可以。 现在,我需要迭代my_dict的键,如果值在列表中,则对其进行迭代。在Python中,非常简单,如下所示: 但是,在Cython内部,我也想在nogil内部实现相同的功能。由于nogil内不允许使用python对象,因此我全都陷入了困境。 有人可以帮我吗? 问题答案: 没有GIL