欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Nutz5---nutz事物练习

程序员文章站 2022-07-15 16:19:40
...
第一:页面
<input type="button" value="删除Person,address" onclick="deletePersonAndAddress();">

//更新Person,address对象 练习nutz事务
function deletePersonAndAddress(){
        $.ajax({
            type : 'POST',
            url : 'deletePersonAndAddress.nut',
            success : function(){
                alert("chenchaoyang");
            }
        });
}

第二Action
/**
	 * 删除人员和Address,练习事物
	 */
	@At("/deletePersonAndAddress")
	@Ok("json")
	@AdaptBy(type = PairAdaptor.class)
	public String deletePersonAndAddress() {
		final Person person = dao.fetch(Person.class, 26);
		final Address address = dao.fetch(Address.class,25);
		person.setName("奥巴马");
		address.setName("美国");
		
		//exec第一个参数是事物级别
		Trans.exec(Connection.TRANSACTION_REPEATABLE_READ,new Atom() {
			@Override
			public void run() {
				//语句1 能成功执行。
				dao.update(person);
				
				//人为制造异常
				System.out.println(new String[3]);
				String[] temp = new String[3];
				System.out.println(temp[5]);
				
				//因为前面有异常发生下面语句2  没有执行,
				//并且语句一的更新也自动执行回滚
				dao.update(address);
			}
		});
		return "success";
	}


第三:其他
nutz可以支持无限层的事物嵌套
例如:
Trans.exec(Connection.TRANSACTION_READ_COMMITTED, new Atom(){
    public void run(){
        dao.update(xxx);
        dao.update(bbb);

        // 在下层模板,虽然你指定了新的事务级别,但是这里的事务级别还是
        // 'TRANSACTION_READ_COMMITTED'。在一个事务中,级别一旦设定就不可更改
        Trans.exec(Connection.TRANSACTION_SERIALIZABLE, new Atom(){
            public void run(){
                dao.update(CCC);
                dao.update(EEE);
            }
        });
    }
});


另外还有一种方式支持事物就是:
dao.execute(Sql ...)
相关标签: nutz