Использует ли hibernate jdbc внутренне или JTA для выполнения операций сохранения и получения?
JDBC и JTA не являются взаимозаменяемыми. JDBC - это стандартный API , который Java-приложения используют для взаимодействия с базой данных. JTA - это стандартный API для управления транзакциями через один или несколько ресурсов. Наиболее близким ответом на ваш вопрос будет то, что «внутри» Hibernate использует JDBC для взаимодействия с базой данных.
Как метод getCurrentSeessionSession () получает сеанс, связанный с текущей транзакцией JTA.
Не совсем. SessionFactory.getCurrentSession () получает сеанс в соответствии с текущим контекстом сеанса . Одной из реализаций этой стратегии является контекст сеанса JTA , который по существу связывает сеансы с транзакцией JTA. Транзакция JTA не «имеет» сеанс Hibernate, поскольку JTA ничего не знает о Hibernate, и было бы неправильно говорить, что Hibernate использует JTA внутри. Он просто имеет возможность интеграции с JTA и позволяет управлять транзакциями.
здесь я хочу понять роль строки // tx = session.beginTransaction ();
Он начинает транзакцию в любом используемом вами механизме транзакций, который регулируется используемой TransactionFactory . Например, с JDBCTransactionFactory он просто гарантирует, что auto-commit отключен, чтобы изменения не были зафиксированы до завершения транзакции.
как только мы фиксируем конкретную транзакцию, все транзакции, созданные из одного сеанса, будут зафиксированы один раз.
В обычных условиях сеанс связан только с одной транзакцией. Многократные вызовы Session.beginTransaction () просто возвращают одну и ту же базовую транзакцию .
Итак, чего мы пытаемся достичь с помощью // tx = session.beginTransaction ()
Только так: скажите всем, что управляет вашими транзакциями, что вы начинаете новую транзакцию. Это означает, что все, что происходит, пока вы не совершите commit () или rollback (), должно иметь общепринятую семантику транзакции базы данных .