我是hibernate新手,开始学习hibernate。我将要阅读的章节使用 hibernate 和 JDBC。我的第一个问题是hibernate内部使用jdbc还是JTA来执行持久化和获取操作?
但是我也可以在这里看到一些关于 JTA 的提及,例如
getCurrentSeessionSession()
方法获取与当前 JTA 事务关联的会话。问题:- 基本上我想了解JTA和jdbc在hibernate中的作用。
问题2:-我可以在休眠中的任何操作中看到下面的代码片段
try{
session = factory.openSession();
tx = session.beginTransaction();
session.save(myClass);
tx.commit();
}
finally{
session.close();
}
在这里,我想了解线路的作用
tx = session.beginTransaction();
据了解,每个会话将使用一个连接。所以即使
如果我们从同一个会话启动多个事务,我们将使用相同的连接。一旦我们提交特定交易,所有交易
从同一会话创建的将被提交一次。那么我们想要通过 tx = session.beginTransaction();
实现什么目标
hibernate内部使用jdbc还是JTA来进行persist和get操作?
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(); 行的作用
控制。例如,使用 JDBCTransactionFactory,它只是确保关闭它会以您使用的任何事务机制开始事务,该事务由正在使用的
TransactionFactory
自动提交,以便在事务完成之前不会提交更改。 一旦我们提交特定事务,从同一会话创建的所有事务都将被提交一次。
。正常情况下,一个Session只关联一个事务。多次调用 Session.beginTransaction() 将简单地
返回相同的底层事务
那么我们试图通过 // tx=session.beginTransaction() 来实现什么
的普遍接受的语义。就是这样:告诉管理您交易的任何人您正在开始一项新交易。这意味着在 commit() 或 rollback() 之前发生的所有事情都应该具有
数据库事务