gpt4 book ai didi

java - 需要了解Hibernate配置的transaction.factory_class

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:46:50 24 4
gpt4 key购买 nike

在我的 hibernate.cfg.xml 文件中,其中一个属性是 -

<property name = "transaction.factory_class"> <!--1-->
org.hibernate.transaction.JDBCTransactionFactory <!--2-->
</property> <!--3-->

其他属性很容易理解。但是,当我看到上述属性时,我想到了很多问题。

第 1 行 - 这指定了实现 Transaction*Factory* 接口(interface)的类。

Q1 - 我看到了 TransactionFactory 的 java 文档,但不明白它到底是什么。这个“工厂”是什么意思?他们为什么不按照行称它为 TransactionGenerator -

Contract for generating Hibernate Transaction instances.

Q2 - TransactionFactory 引导我进行 Transaction。这与数据库事务完全一样吗?

第三季度 -

A single session might span multiple transactions since the notion of a session (a conversation between the application and the datastore) is of coarser granularity than the notion of a transaction. However, it is intended that there be at most one uncommitted Transaction associated with a particular Session at any time.

... session 的概念比事务的概念粒度更粗。

简单来说这意味着什么?

--

However, it is intended that there be at most one uncommitted Transaction associated with a particular Session at any time.

你为什么要这样做?

我认为 API 文档不够清晰。让 n00b 的生活变得悲惨。

最佳答案

Q1 - 推理很清楚。事务创建遵循工厂模式。例如,在应用程序服务器(如 JBOSS、WebSphere 等)通过 JTA API 管理事务创建的环境中,您将使用 JTA 事务工厂来创建事务,并且该事务将由 hibernate 进一步使用。在纯 Spring 管理的环境中,可以将 Spring 配置为使用 HibernateTransactionFactory。简而言之,它将遵循类似的方式:

IFactory f= FactoryCreatorForYourEnvironment.create();
Transaction t = f.create();

Q2 和 Q3 - 是的, hibernate 事务工厂在基础数据库上创建数据库事务。请注意,一个 session 可能跨越多个事务—— hibernate session 抽象了一个数据库连接。在同一个连接上,多个开始事务、提交事务周期是可能的。示例:参与 bean(EJB 或 SPRING bean)时需要 REQUIRE_NEW 属性。因此,如文档中所述, session 是一个更广泛(更粗略)的术语。

任何写入、删除、 protected 读取都需要事务。所以 session 持有一个隐式事务。您可以阅读相关的堆栈溢出文章 here .

HTH.

关于java - 需要了解Hibernate配置的transaction.factory_class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16049526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com