关于SPRING事物不能再方法间起作用的疑问

myepoch 2014-01-24 11:26:39
public class MyEntry implements IBaseService{

/**
* 对外唯一入口
*/
public String A(String jsonStr) throws Exception{



}

//此处需要事务
private String B(UserInfo user, UserDetail detail) throws DBException{

baseDao.saveObject(user);

baseDao.saveObject(detail);

}

}


问题描述

如果我在配置事务的时候,如下
<tx:method name="A" propagation="REQUIRED" />
那么如果baseDao.saveObject(detail)异常,整个B方法全部回滚。没问题

但是
如果我在配置事务的时候仅仅对 name="B",并且不对A进行配置事务,如下:
<tx:method name="B" propagation="REQUIRED" />

那么如果baseDao.saveObject(detail)异常,方法B不能全部回滚(也就是说虽然baseDao.saveObject(detail)没有保存成功,但是baseDao.saveObject(user)保存成功了)

请问这个问题到底怎么回事呢。

根据 PROPAGATION_REQUIRED:支持当前事务,如果当前没有事务,就新建一个事务。难道SPRING的这个没有起到作用吗?
...全文
514 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
antony0203 2014-01-27
  • 打赏
  • 举报
回复
引用 12 楼 myepoch 的回复:
[quote=引用 10 楼 antony0203 的回复:] 你的MyEntry这个类在你的Action或者哪里被调用的地方应该是注释引用的,那个Spring那时已经生成了同名的代理类,其中方法A,根据你的配置是无事务的,方法B是有事务的.然后如果你那个Action直接调用MyEntry的方法B,事务是能生效的,而调用方法A,则无事务,再根据A去调用B也一样没有事务.
您的回复是“那个Spring那时已经生成了同名的代理类” 我想问的是,为什么这个代理类对 通过A方法调用B方法的事务无效呢。[/quote] 因为生成代理类的时候,对应A方法和B方法他们的事务属性也标注进去了,如果你配置的A无事务,那么你调用A方法时就没有事务,通过A再调用B也一样没事务
myepoch 2014-01-26
  • 打赏
  • 举报
回复
还有人能提供支援吗
myepoch 2014-01-26
  • 打赏
  • 举报
回复
到底什么原因呢
小丑哥_V5 2014-01-26
  • 打赏
  • 举报
回复
简单的说,是在外部接口实例访问方法事务才起作用吧,例如,userservice实现类里,有save,modify方法,在modify里面直接调用save方法,save方法是不起回滚作用,save里面的表操作是不会回滚吧,你只能在modify方法里面调用userdao的insert和update才能保证两个操作的表都能回滚,至于原理你就自己看下spring的源码实现
myepoch 2014-01-26
  • 打赏
  • 举报
回复
有人能帮助吗
myepoch 2014-01-26
  • 打赏
  • 举报
回复
引用 10 楼 antony0203 的回复:
你的MyEntry这个类在你的Action或者哪里被调用的地方应该是注释引用的,那个Spring那时已经生成了同名的代理类,其中方法A,根据你的配置是无事务的,方法B是有事务的.然后如果你那个Action直接调用MyEntry的方法B,事务是能生效的,而调用方法A,则无事务,再根据A去调用B也一样没有事务.
您的回复是“那个Spring那时已经生成了同名的代理类” 我想问的是,为什么这个代理类对 通过A方法调用B方法的事务无效呢。
myepoch 2014-01-26
  • 打赏
  • 举报
回复
所以我想咨询的是 "是不是Spring 内部调用时,被调用方法的事务声明将不起作用",为什么呢?难道一定要在A方法上加事务码,A方法处理额外的逻辑,而这些逻辑中除了调用B方法外,不需要其他事务的啊。
antony0203 2014-01-26
  • 打赏
  • 举报
回复
你的MyEntry这个类在你的Action或者哪里被调用的地方应该是注释引用的,那个Spring那时已经生成了同名的代理类,其中方法A,根据你的配置是无事务的,方法B是有事务的.然后如果你那个Action直接调用MyEntry的方法B,事务是能生效的,而调用方法A,则无事务,再根据A去调用B也一样没有事务.
myepoch 2014-01-24
  • 打赏
  • 举报
回复
这个问题困扰很久了,就是不清楚回事啊。是不是我哪里配置的不对呢。
myepoch 2014-01-24
  • 打赏
  • 举报
回复
有人说 内部调用时,被调用方法的事务声明将不起作用 Spring的事务传播策略在内部方法调用时将不起作用
myepoch 2014-01-24
  • 打赏
  • 举报
回复
郁闷啊,没人能解答吗
myepoch 2014-01-24
  • 打赏
  • 举报
回复
更改public,问题依旧
Test_LD 2014-01-24
  • 打赏
  • 举报
回复
楼主可以把方法B改成public 试一下 其他的我就不知道了
myepoch 2014-01-24
  • 打赏
  • 举报
回复
请各位高手帮忙
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧