javatransaction注解(java 运行时注解)
java中 Transaction是什么关键字啊??
是hibernate里的吧,
是事物控制的意思,,主要有两个方法,,一个提交commit(),一个是回滚rollback()
Spring之Transactional注解
该注解的签名如下:
定义零(0)个或多个异常类,这些异常类必须是Throwable的子类,指示哪些异常类型必须导致事务回滚。
默认情况下,事务将在RuntimeException和Error上回滚,但不会在检查型异常(业务异常)上回滚。具体可以看DefaultTransactionAttribute.rollbackOn(Throwable)方法,有比较详细的解释。
这是构造回滚规则(与 rollbackForClassName比较)的首选方法,它匹配异常类及其子类。
定义零(0)个或多个异常名称(对于必须是Throwable子类的异常),指示哪些异常类型必须导致事务回滚。
这可以是完全限定类名的子字符串,目前不支持通配符。例如,“ServletException”的值将与ServletException及其子类匹配。
定义零(0)个或多个异常类,这些异常类必须是Throwable的子类,指示哪些异常类型不能导致事务回滚。
这是构造回滚规则(与noRollbackForClassName相比)的首选方法,它匹配异常类及其子类。
一个布尔标志,如果事务实际上是只读的,则可以将其设置为true,从而允许在运行时进行相应的优化。
默认为false。
这只是作为实际事务子系统的提示;它不一定会导致写入访问尝试失败。无法解释只读提示的事务管理器在请求只读事务时不会引发异常,而是默默地忽略该提示。
此事务的超时时间(秒)。
默认为基础事务系统的默认超时。为Propagation.REQUIRED和Propagation.REQUIRES_NEW设计的参数,因为它只适用于新启动的事务。默认值为-1,表示不设置超时时间。
此事务的超时时间(秒)。
默认为基础事务系统的默认超时。
专门设计用于Propagation.REQUIRED和Propagation.REQUIRES_NEW,因为它只适用于新启动的事务。
事务隔离级别。
默认为Isolation.DEFAULT.
专门为Propagation.REQUIRED 和 Propagation.REQUIRES_NEW设计使用的,因为它只适用于新启动的事务。如果您希望隔离级别声明在参与具有不同隔离级别的现有事务时被拒绝,请考虑在事务管理器上切换“验证有效事务”标志为“true”。
事务传播类型。
默认为 Propagation.REQUIRED.
定义零(0)个或多个事务标签。标签可用于描述事务 ,并可由单个事务管理器进行评估。标签可能仅用于描述目的,或映射到预定义的事务管理器特定选项。
请参阅实际事务管理器实现的描述,了解它如何评估事务标签。
指定事务的限定符值。
可用于确定目标事务管理器,与特定TransactionManager bean定义的限定符值(或bean名称)匹配。
propagation的取值定义成了一个枚举类,如下所示:
REQUIRED
其值为0,支持当前事务,如果不存在,则创建新事务。类似于同名的EJB事务属性。这是事务注解的默认设置。
SUPPORTS
其值为1,支持当前事务,如果不存在,则以非事务方式执行。类似于同名的EJB事务属性。
注意:对于具有事务同步的事务管理器,SUPPORTS 与完全没有事务略有不同,因为它定义了同步将应用的事务范围。因此,相同的资源(JDBC连接、Hibernate会话等)将在整个指定范围内共享。请注意,这取决于事务管理器的实际同步配置。
MANDATORY
支持当前事务,如果不存在则抛出异常。类似于同名的EJB事务属性。
REQUIRES_NEW
创建新事务,并暂停当前事务(如果存在)。类似于同名的EJB事务属性。
注意:实际的事务暂停不会在所有交易管理器上立即生效。这尤其适用于JtaTransactionManager。JtaTransactionManager,它需要TransactionManager 可供其使用(在标准Java EE中是特定于服务器的)。
NOT_SUPPORTED
以非事务方式执行,如果当前事务存在,则暂停当前事务。类似于同名的EJB事务属性。
注意:实际的事务暂停不会在所有事务管理器上立即生效。这尤其适用于JtaTransactionManager。JtaTransactionManager,它需要TransactionManager可供其使用(在标准Java EE中是特定于服务器的)。
NEVER
以非事务方式执行,如果存在事务,则抛出异常。类似于同名的EJB事务属性。
NESTED
如果存在当前事务,则在嵌套事务中执行,否则按要求执行。EJB中没有类似的特性。
注意:嵌套事务的实际创建只适用于特定的事务管理器。开箱即用,这只适用于JDBC DataSourceTransactionManager。一些JTA提供者可能也支持嵌套事务。
枚举,用来表示Transactional 注解的事务隔离级别,与TransactionDefinition 接口定义的事务隔离级别相一致。
枚举定义如下:
DEFAULT
使用基础数据存储的默认隔离级别。所有其他级别都对应于JDBC隔离级别。
READ_UNCOMMITTED
一个常数,指示可能发生脏读、不可重复读和幻象读。此级别允许一个事务更改的行在提交该行的任何更改之前被另一个事务读取(“脏读”)。如果回滚了任何更改,则第二个事务将检索到无效行。
READ_COMMITTED
指示防止脏读的常数;可能会发生不可重复读取和幻象读取。此级别仅禁止事务读取包含未提交更改的行。
REPEATABLE_READ
指示防止脏读和不可重复读的常数;可能会发生幻象读取。该级别禁止事务读取包含未提交更改的行,还禁止一个事务读取一行,第二个事务更改该行,第一个事务重新读取该行,第二次获得不同的值(“不可重复读取”)。
SERIALIZABLE
一个常数,指示防止脏读、不可重复读和幻象读。该级别包括隔离可重复读取的禁止,并进一步禁止一个事务读取满足where条件的所有行,第二个事务插入满足where条件的行,第一个事务重新读取相同条件,在第二次读取中检索附加的“幻影”行。
java里面Transaction transaction = (Transaction)(list.get(i));是什么意思
我粗看了一下,account是账户,它含有一个ArrayList,ArrayList可以理解成一个Transaction类型的数组,list.get(i)就是获得第i笔Transaction的记录。
为什么java里面要用@Transactional注解
打了这个注解的类或者方法表示该类里面的所有方法或者这个方法的事务由spring处理,来保证事务的原子性,不知道这样说你能不能理解,即是方法里面对数据库操作,如果失败则spring负责回滚操作,成功提交操作
java @开头的注释都什么意思啊? 如@Results,@Autowirede@Transactional,@SuppressWarnings,@Service等
都是 javaDoc 注释
javadoc 标记由“@”及其后所跟的标记类型和专用注释引用组成
javadoc 标记有如下一些:
@author 标明开发该类模块的作者
@version 标明该类模块的版本
@see 参考转向,也就是相关主题
@param 对方法中某参数的说明
@return 对方法返回值的说明
@exception 对方法可能抛出的异常进行说明
@author 作者名
@version 版本号
其中,@author 可以多次使用,以指明多个作者,生成的文档中每个作者之间使用逗号 (,) 隔开。@version 也可以使用多次,只有第一次有效
使用 @param、@return 和 @exception 说明方法
这三个标记都是只用于方法的。@param 描述方法的参数,@return 描述方法的返回值,@exception 描述方法可能抛出的异常。它们的句法如下:
@param 参数名 参数说明
@return 返回值说明
@exception 异常类名 说明