您能否解释以下两种类型的交易之间的区别:
我也想知道有关@Transactional
注释的信息。
对于初学者来说,它们都是事务,但是它们包含不同的概念和组件。
TL; DR
Hibernate处理数据库特定的事务,而spring提供常规的事务管理服务。@Transactional
是配置事务管理行为的好方法。
长话说:
交易次数
事务基本上是工作的单元(即,对某项的更改),可以作为可提交或回滚的单个操作进行管理。在Java世界中,有许多不同类型的事务-
数据库,像JMS这样的消息传递系统,应用程序间事务(适用于那些不太精打细算的人)或事务中可能需要包含的其他任何事物。在Java标准中,交易是使用Java交易API进行管理的,该
API设置了如何参与交易的规则。
冬眠
Hibernate是一个ORM,用于将数据库组件抽象为Java对象,因此它的事务与数据库中的更改特别相关。事务可由对各种数据库表的一次或多次写操作组成,一旦完成操作,这些写操作将全部提交。回滚事务,例如,如果在操作过程中发生任何错误,则撤消所有更改。
弹簧
在最低层次上,Spring
是一个用于管理对象之间的配置和依赖性的应用程序框架。此外,它还提供了一个接口,用于管理在现代应用程序中使用的高级服务,例如数据库,消息服务,MVC框架和事务。
Spring被设计为用作应用程序中对象和服务的全方位主控,因此,它的事务概念比休眠相关的数据库特定事务更高。Spring事务旨在让您对所有事务资源进行细粒度的控制,同时抽象出协调事务所需的通常混乱的编码。
@Transactional
Spring提供了几种不同的使用事务的方法-
其中包括基于xml的方面,对API进行编码以及基于注释的声明性事务。基于注释的事务非常方便,因为您无需将事务管理样板代码添加到您的应用程序中(即使通过API使用PlatformTransactionManager也有相当大的编码开销)。
因此,基本上发生的事情@Transactional
是,在运行时spring基于您通过注释配置的内容,在代码库中扫描@Transactional类和方法,并将其包装在特定于事务的管理代码中。所以这样的方法:
@Transactional(propagathtml" target="_blank">ion = 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管理代码。
问题内容: 您能否解释以下两种交易类型之间的区别: Hibernate交易 Spring交易 我也想了解注释。 问题答案: 对于初学者来说,它们都是事务,但是它们包含不同的概念和组件。 TL; DR Hibernate处理数据库特定的事务,而spring提供常规的事务管理服务。是配置事务管理行为的好方法。 长话说: 交易次数 事务基本上是工作的单元(即,对某事物的更改),可以作为可提交或回滚的单个
问题内容: 我有一个具有事务性属性的方法: 可以同时多次调用此方法,并且对于每个事务,如果发生错误而不是回退(独立于其他事务),则对于每个事务。 问题是,这可能迫使Spring创建多个事务,即使另一个事务可用,也可能会导致一些性能问题。 Java doc 说: 这似乎解决了性能问题,不是吗? 回滚问题呢?如果在使用现有事务时新方法调用回滚怎么办?那会不会回滚整个交易,即使以前的呼叫也是如此? [编
本文向大家介绍脱链交易和链上交易有什么区别?相关面试题,主要包含被问及脱链交易和链上交易有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 回答:** 链上交易:这些交易在区块链上可用,并且对区块链网络上的所有节点都是可见的。它包括由一定数量的参与者对交易进行身份验证和确认。 链下交易:这些交易处理区块链外部的值,可以使用多种方法进行。
问题内容: 我正在开发基于JPA +Hibernate,Spring和Wicket的Web应用程序。我想知道在我的代码中实现事务的最佳方法是什么?我应该使用什么交易经理?应该是,还是其他?我想用Spring来管理我的交易。 问题答案: 南大是正确的,你 可以 只使用JpaTransactionManager接口。我们在这里谈论的事务管理器抽象是Spring的PlatformTransactionM
问题内容: 我想使用SpringContextTests测试我的Dao类。 在我的方法类中,我扩展了,以便我的测试类与JUnit4集成。我还设置了配置,并在和的DownDown中进行了初始化和数据库清理。我的测试课效果很好。 我的问题是,当我运行测试类并且数据库中充满了数据时,原始数据没有回滚并且数据库被清除了。在该方法中,我清除数据库并填充数据,以为我可以回滚数据库,但不能回滚。 任何人都可以找
问题内容: 我正在使用hibernate处理spring项目,并希望使用ehcache实现二级缓存。我看到了许多解决方法: 引入注释 一个旨在成为继任者的工具集。 可以很好地集成到休眠本身中,以使用例如注释进行缓存。 使用代理。基于注释的配置迅速变得有限或复杂(例如,注释嵌套的多个级别) 就我个人而言,我认为还不够彻底,因此我可能更愿意考虑发展得更为积极。尽管这似乎是最完整的实现(例如,读取和写入