当前位置: 首页 > 面试题库 >

“Spring交易”和“Hibernate交易”有什么区别

祝宾白
2023-03-14
问题内容

您能否解释以下两种交易类型之间的区别:

  1. Hibernate交易
  2. Spring交易

我也想了解@Transactional注释。


问题答案:

对于初学者来说,它们都是事务,但是它们包含不同的概念和组件。

TL; DR

Hibernate处理数据库特定的事务,而spring提供常规的事务管理服务。@Transactional是配置事务管理行为的好方法。

长话说:

交易次数

事务基本上是工作的单元(即,对某事物的更改),可以作为可提交或回滚的单个操作进行管理。在Java世界中,有许多不同类型的事务-
数据库,像JMS这样的消息传递系统,应用程序间事务(适用于那些不太胆小的人)或事务中可能需要包含的其他任何事物。在Java标准中,交易是使用Java交易API进行管理的,该
API设置了如何参与交易的规则。

hibernate

Hibernate是一个ORM,用于将数据库组件抽象为Java对象,因此其事务与数据库中的更改特别相关。事务可由对各种数据库表的一次或多次写操作组成,一旦完成操作,这些写操作将全部提交。回滚事务,例如,如果操作期间发生任何错误,则允许撤消所有更改。

弹簧

在最低层次上,Spring
是一个用于管理对象之间的配置和依赖关系的应用程序框架。此外,它还提供了一个接口,用于管理在现代应用程序中使用的高级服务,例如数据库,消息服务,MVC框架和事务。

Spring被设计为用作应用程序中对象和服务的全方位主控,因此,它的事务概念比hibernate相关的数据库特定事务更高。Spring事务旨在让您对所有事务资源进行细粒度的html" target="_blank">控制,同时抽象出协调事务所需的通常混乱的编码。

@Transactional

Spring提供了几种使用事务的不同方法-
其中包括基于xml的方面,对API进行编码和基于注释的声明性事务。基于注释的事务很方便,因为您不需要将事务管理样板代码添加到您的应用程序中(即使通过API使用PlatformTransactionManager也有很多编码开销)。

因此,基本上发生的事情@Transactional是,在运行时spring基于您通过注释配置的内容,在代码库中扫描@Transactional类和方法,并将它们包装在特定于事务的管理代码中。所以这样的方法:

@Transactional(propagation = REQUIRES_NEW, rollbackFor = {Exception.class})
public void saveAndSendMessage(Foo foo) throws Exception {
    dbManager.save(foo);
    Bar bar = transform(foo);
    jmsSystem.send(bar);
}

可以让spring为数据库和jms系统设置一个新的事务,并协调它们,而无需自动添加所有特定的tx管理代码。



 类似资料:
  • 问题内容: 您能否解释以下两种类型的交易之间的区别: 休眠交易 春季交易 我也想知道有关注释的信息。 问题答案: 对于初学者来说,它们都是事务,但是它们包含不同的概念和组件。 TL; DR Hibernate处理数据库特定的事务,而spring提供常规的事务管理服务。是配置事务管理行为的好方法。 长话说: 交易次数 事务基本上是工作的单元(即,对某项的更改),可以作为可提交或回滚的单个操作进行管理

  • 本文向大家介绍脱链交易和链上交易有什么区别?相关面试题,主要包含被问及脱链交易和链上交易有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 回答:** 链上交易:这些交易在区块链上可用,并且对区块链网络上的所有节点都是可见的。它包括由一定数量的参与者对交易进行身份验证和确认。 链下交易:这些交易处理区块链外部的值,可以使用多种方法进行。

  • 问题内容: 我试图使声明式交易工作。 这是我的spring.xml文件: 这是我的控制器实现: 两者都在称为test的包中。 这是我的尝试: 但这引发了异常: org.hibernate.HibernateException:如果没有活动事务,createQuery无效 为什么transactionManager不起作用?我希望使用@Transactional批注将所有事务由Spring框架管理。

  • 问题内容: 我有一个使用Hibernate 4和Spring Transactions的Spring 3.2应用程序。所有方法都运行良好,我可以正确访问数据库以保存或检索实体。然后,我引入了一些多线程,并且由于每个线程都在访问db,所以我从Hibernate中收到以下错误: 我从网上读到我必须添加到Hibernate配置中的内容,但是现在每次我尝试访问数据库时,都会得到: 但是,我的服务方法带有注

  • 本文向大家介绍什么是Coinbase交易?相关面试题,主要包含被问及什么是Coinbase交易?时的应答技巧和注意事项,需要的朋友参考一下 回答:Coinbase交易是矿工创建的独特类型的比特币交易。这是新区块中的第一笔交易。矿工使用它来收集工作的集体奖励。矿工收取的任何交易费也将在此交易中发送。

  • 问题内容: 我有一个具有事务性属性的方法: 可以同时多次调用此方法,并且对于每个事务,如果发生错误而不是将其回滚(独立于其他事务),则将被多次调用。 问题在于,这可能迫使Spring创建多个事务,即使另一个事务可用,也可能会导致一些性能问题。 Java doc 说: 这似乎解决了性能问题,不是吗? 回滚问题呢?如果在使用现有事务时新方法调用回滚怎么办?那会不会回滚整个交易,即使以前的呼叫也是如此?