Nutz5---nutz事物练习

第一:页面
<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)