NutzCN Logo
问答 nutz嵌套事务问题
发布于 3349天前 作者 yong9664 4872 次浏览 复制 上一个帖子 下一个帖子
标签: dao
public class AA
{
	public void A()
	{
		Trans.exec(new Atom(){
			dao.insert(...); // 执行添加操作
			B(); // 另外一个方法
		});
		// 问题:怎么判断整个事务执行成功了。
	}
	public void B()
	{
		dao.insert(...);
		C(); // 另外一个方法
	}
	public C()
	{
		dao.update(...);
	}
}

请教下,上面那种代码是在一个事务里的吗?
还有,在A()方法里怎么判断整个事务执行成功了。

18 回复

只有最外层的事务模板生效,其他都被忽略

来自炫酷的 NutzCN

@wendal 问下,怎么判断一个事务执行成功了? 我看到有个Trans.exec(Molecule molecule)方法有返回值,但是这个不会用,能不能稍微给个简单的例子?

@yong9664 不抛异常就是成功

来自炫酷的 NutzCN

@wendal Trans.exec(Molecule molecule)这个方法是怎么用的?给个简单的例子吧,谢谢!

@yong9664

User user = (User)Trans.execute(new Molecue(){
  public void run(){
    dao.insert(...);
    Object obj = dao.update(....);
    setObject(xxx);//设置返回值,非必须
  }
});

来自炫酷的 NutzCN

@wendal 大神,请教下

public synchronized void C()
	{
		dao.update(...);
	}

如果将C()方法上加上synchronized,这个事务的处理会发生怎样的变化?

@yong9664 对Trans.exec来说没有变化, 因为Trans根本不能检查/也不会检查到这个

@wendal 我自己测试过, 在执行C()方法都会同步,当被调用时,其他调用会被阻塞在外面... 这是什么情况啊!!! 这个事务研究了挺长时间了,还是有些地方不太懂..

@yong9664 你想想啊, synchronized的效果就是同一时间内,只能有一个调用在执行啊

@wendal 哦, 我理解错了你刚刚的回复... 以为说不会被同步呢!!!
另外一个问题,C()方法会在B()方法被调用, 我不想C()方法被最外层的Trans.exec影响,能实现吗?

@wendal 其他都被忽略。。所以是在一个事务中还是不在一个事务中啊。。= =|||

整段代码只有一个事务.

@wendal 所以B方法的操作是在A方法的那个事务中是吧?

@liuhuanting 是的. 总共就一个事务,就是最外层那个

@wendal
User user = (User)Trans.execute(new Molecue(){
public void run(){
dao.insert(...);
int o= = dao.update(....);
if(o<0)
throw new Exception("");//这里提示要求要try catch 既然捕获了为什么还可以回滚
setObject(xxx);//设置返回值,非必须
}
});

干货,我这条算灌水,自动忽略吧^_^

添加回复
请先登陆
回到顶部