Sar*_*ran 18 java spring hibernate spring-mvc
能否请您解释以下两种交易之间的区别:
另外我想知道@Transactional
注释.
str*_*y05 26
对于初学者来说,他们都是交易,但它们包含不同的概念和组件.
TL; DR
Hibernate处理特定于数据库的事务,而spring提供了一般的事务管理服务.@Transactional
是一种配置事务管理行为的好方法.
长篇故事:
交易
事务基本上是工作单元(即对某些事物的更改),它们作为可以提交或回滚的单个操作进行管理.Java世界中有许多不同类型的事务 - 数据库,JMS之类的消息传递系统,应用程序间事务(对于那些不是胆小的人)或者可能需要包含在事务中的任何其他事务.在Java标准中,使用Java Transaction API管理 事务,该API设置如何参与事务的规则.
过冬
Hibernate是用于将数据库组件抽象为Java对象的ORM,因此其事务特别与数据库中所做的更改相关.事务可以由对一个操作完成后提交的各种数据库表的一次或多次写入组成.回滚事务,例如,在操作期间存在任何错误,允许撤消所有更改.
弹簧
在最低级别,Spring 是一个用于管理对象之间的配置和依赖关系的应用程序框架.此外,它还提供了一个用于管理现代应用程序(如数据库,消息传递服务,MVC框架和事务)中使用的更高级别服务的接口.
Spring旨在用作应用程序中包含对象和服务的无所不包的主机,因此它的事务概念比hibernate关注的数据库特定事务处于更高级别.Spring Transactions旨在为您提供对所有事务资源的精细控制,同时抽象出协调事务所需的经常混乱的编码.
@Transactional
Spring提供了一些使用事务的不同方法 - 其中包括基于xml的方面,API编码和基于注释的声明式事务.基于注释的事务很方便,因为您不需要将事务管理样板代码添加到您的应用程序(即使使用PlatformTransactionManager通过API也有相当多的编码开销).
所以基本上发生的事情@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);
}
Run Code Online (Sandbox Code Playgroud)
可以让spring为数据库和jms系统设置一个新的事务,并协调它们,而不需要自动添加所有特定的tx管理代码.
归档时间: |
|
查看次数: |
9404 次 |
最近记录: |