Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
hibernate是在内部使用jdbc还是在内部使用JTA,还是可以配置;_Hibernate - Fatal编程技术网

hibernate是在内部使用jdbc还是在内部使用JTA,还是可以配置;

hibernate是在内部使用jdbc还是在内部使用JTA,还是可以配置;,hibernate,Hibernate,我刚接触hibernate,并开始学习hibernate。我将要学习的章节使用hibernate和JDBC()。我的第一个问题是 hibernate是在内部使用jdbc还是在内部使用JTA来执行持久化和获取操作? 但是我也可以在这里看到一些对JTA的提及,比如getCurrentSessionSession()方法获取与当前JTA事务相关联的会话。问题:-基本上我想了解JTA和jdbc在hibernate中的作用。 问题2:我可以在hibernate的任何操作中看到下面的代码片段 try{ s

我刚接触hibernate,并开始学习hibernate。我将要学习的章节使用hibernate和JDBC()。我的第一个问题是 hibernate是在内部使用jdbc还是在内部使用JTA来执行持久化和获取操作? 但是我也可以在这里看到一些对JTA的提及,比如getCurrentSessionSession()方法获取与当前JTA事务相关联的会话。问题:-基本上我想了解JTA和jdbc在hibernate中的作用。

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

try{ 
session=factory.openSession();
tx=session.beginTransaction();
session.save(myClass);
tx.commit();
}
finally{
session.close();
}
这里,我想了解line//tx=session.beginTransaction()的作用;根据理解,每个会话将使用一个连接。甚至 如果我们从同一个会话启动多个事务,我们将使用相同的连接。一旦我们提交了特定的事务,所有的事务 从同一会话创建的会话将提交一次。那么,我们使用//tx=session.beginTransaction()实现什么目的呢

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

JDBC和JTA是不可互换的。Java应用程序用来与数据库交互的。用于跨一个或多个资源管理事务。与您的问题最接近的答案是“内部”,Hibernate使用JDBC与数据库交互

与GetCurrentSessionSession()类似,方法获取与当前JTA事务关联的会话

不完全是。根据指定的会话获取会话。该策略的一个实现是,它本质上将会话与JTA事务相关联。JTA事务没有Hibernate会话,因为JTA对Hibernate一无所知,所以说Hibernate在内部使用JTA是不对的。它只是能够与JTA集成并让它管理事务

在这里,我想了解line//tx=session.beginTransaction()的作用

它在您正在使用的任何事务机制中开始一个事务,该机制由正在使用的。例如,对于JDBCTransactionFactory,它只是确保事务被关闭,以便在事务完成之前不会提交更改

一旦我们提交了特定的事务,从同一个会话创建的所有事务都将提交一次

在正常情况下,会话仅与一个事务关联。对Session.beginTransaction()的多个调用将简单地执行

那么,我们试图通过//tx=session.beginTransaction()实现什么呢


只是:告诉管理您事务的任何人您正在开始一个新事务。这意味着在commit()或rollback()之前发生的所有事情都应该具有公认的语义。

感谢Ryan的回答。还有两点。正如您所说的“JDBC是Java应用程序用来与数据库交互的标准API”,我可以说每个Java应用程序都将使用JDBC显式地或在内部(对于像hibernate这样的orm工具)或EJB连接到数据库。您说过“JTA是跨一个或多个资源管理事务的标准API。”在java应用程序中,我有两个不同的模式作为数据库。在这里,我仍然将对数据库/模式使用jdbc。在这里,我还将使用JTA来管理continued…..continued。。。跨两个模式的事务。对吗?@Mohit:这将是一个极为罕见的Java应用程序,它可以连接到除JDBC之外的数据库。我自己从来没有听说过,但它可能会发生。至于JTA,它只是JEE事务API。还有其他管理事务的方法,比如Spring的事务管理(不过,它也可以与JTA集成)。如果您想要分布式事务,我对它们了解不多,但我认为您可能希望使用JTA实现。