使用 Hibernate 和 MySQL、全局和本地进行 Spring 事务管理

发布于 2024-11-02 10:20:21 字数 713 浏览 1 评论 0原文

我正在使用 MySQL Server 5.1、Spring 3.0.5 和 Hibernate 3.6 开发 Web 应用程序。我使用 Springs 事务管理。我是新手,所以如果我问一个容易回答的问题,请耐心等待。 :-)

1) 我读到了有关全局 (xa) 和本地事务的内容。全局事务是指在不同资源(如不同数据库)上执行数据操作的事务,对吗?并且本地事务仅在一种资源(数据库)上执行数据操作。?

2) 是否可以使用 Hibernate 进行全局事务?在 Spring 参考文档中,我读到了这样的内容:“您还可以轻松使用 Hibernate 本地事务,如以下示例所示。在这种情况下,您需要定义一个 Hibernate LocalSessionFactoryBean,您的应用程序代码将使用它来获取 Hibernate会话实例。” 这就是为什么我认为 Hibernate 事务可能始终是本地的,并且我没有找到任何其他相关信息。

3) 为什么可以在 Hibernate 中使用 MyISAM 表?他们不支持事务,而我认为 Hibernate 需要事务?我实在不明白这个。起初我认为这是不可能的 - 但为什么可以用 Hibernate 创建 MyISAM 表并使用 MyISAM 方言呢?这是如何运作的??? Hibernate 是否需要事务?我认为要使用 Hibernate,你需要使用 InnoDB。

感谢您的回答! :-)

Im working on developing a webapplication with MySQL Server 5.1, Spring 3.0.5 and Hibernate 3.6. I use Springs Transaction Management. Im a newbie, so please be patient with me if I ask a question which is easy to answer. :-)

1) I read about global (xa) and local transactions. Is it correct, that global transactions mean transactions, which execute dataoperations on different resources (like different databases). And that local transactions execute dataoperations on only one resource (database).?

2) Is it possible to have global transactions with Hibernate? In the Spring Reference Documentation I read this: "You can also use Hibernate local transactions easily, as shown in the following examples. In this case, you need to define a Hibernate LocalSessionFactoryBean, which your application code will use to obtain Hibernate Session instances." Thats why I think that Hibernate transactions are maybe always local and I did not find anything else about it.

3) Why is it possible to use MyISAM tables with Hibernate? They dont support Transactions and I think Hibernate requires Transactions? I really don't understand this. At first I thought it wouldn't be possible - but why is it then possible to create MyISAM Tables with Hibernate and use a MyISAM Dialect? How does this work??? Does Hibernate require transaction or doesnt it? I thought for using Hibernate you need to use InnoDB.

Thanks for answering! :-)

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

愁杀 2024-11-09 10:20:21
  1. 是的,JTA,Java 中 XA 事务的 API,使用两阶段提交协议来执行全球交易。如果您需要确保多个资源上的事务一致性,JTA 是合适的 Java 工具。

  2. Hibernate 可以与 JTA 配合使用。它比普通的资源本地事务更难设置,由于两阶段提交的性质,通常会使用更多的资源,并且数据库供应商和驱动程序之间的实现质量有所不同,因此只有在必要时才使用它。 (例如,JTA 有点与 MS SQL Server 配合使用,但此功能仅通过一组存储过程粘合。其他资源可能不支持所有标准,例如不允许暂停事务并稍后恢复。如果您不需要它,请省去麻烦。)

  3. 您可以将 MyISAM 与 Hibernate 一起使用,但事务将不起作用。 Hibernate 将正常启动并提交事务,MyISAM 存储引擎将默默地忽略这些事务,因此所有内容都会直接写入磁盘。使用默认存储引擎 InnoDB,除非您有理由不这样做。

  1. Yes, JTA, the API for XA transactions in Java, uses a two-phase commit protocol to perform global transactions. If you need to ensure transaction consistency over multiple resources, JTA is the proper tool in Java.

  2. Hibernate does work with JTA. It is quite a bit harder to set up than plain vanilla resource local transactions, generally uses more resources due to the nature of two-phase commit, and the implementation quality varies between database vendors and drivers, so only use it if you have to. (For example, JTA kinda sorta works with MS SQL Server, but this functionality is only glued on through a set of stored procedures. Other resources may not support all of the standard, for example not allow a transaction to be paused and later resumed. If you don't need it, save yourself the trouble.)

  3. You can use MyISAM with Hibernate, but transactions won't work. Hibernate will start and commit transactions normally, which the MyISAM storage engine will ignore silently, so everything will go straight to disk. Use the default storage engine, InnoDB, unless you have a reason not to.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文