public void add_treenode(Treenode treenode) {
Trans.exec(new Atom(){
public void run() {
dao.insert(treenode);
dao.update(treenode);
}
});
}
这样写为什么不行???????????
到底怎么写啊
java语法问题??
public void add_treenode(final Treenode treenode) {
Trans.exec(new Atom(){
public void run() {
dao.insert(treenode);
dao.update(treenode);
}
});
}
wendal哥 我看过你的视频 , 请问:
1.为什么必须加final?
2.我的dao是注入进来的,如下:
@IocBean
public class BaseDAOImpl implements BaseDAO { //BaseDAOImpl实现BaseDAO接口定义的通用功能
private Class clazz;
@Inject
public Dao dao;
public BaseDAOImpl() {
this.clazz = ((Class) ((java.lang.reflect.ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]);
}
//下面是增删改查的通用方法
public void insert(T t) {
this.dao.insert(t);
}
。。。。。(省略)
这样,我使用事务 需要注入吗?不注入的话能拿到实例吗?
内部类引用的变量必须是final的, 这java语法的要求.
至于你说 事务和注入的关系, 我有点晕. 操作数据库才存在事务, 而操作数据库需要dao实例, 而dao实例是否从ioc来,这不是硬性要求.
如果你觉得Trans.exec好麻烦, 可以考虑用@Aop事务
@Aop(TransAop.READ_COMMITTED)
public void add_treenode(Treenode treenode) {
dao.insert(treenode);
dao.update(treenode);
}
// 并在MainModule的@IocBy添加如下信息, 以启用事务AOP相关配置.
@IocBy(args={
"*js", "ioc/",
"*anno", "net.wendal.nutzbook",
"*tx" // 这一行.
})
wendal哥:
1.我是插入一条记录同时删除一条记录,如果不成功可以回滚吗? 怎么写呢?
2.我想让dao.insert(treenode);和 dao.update(treenode); 返回在数据库中的影响行数,比如:在数据库插入了几行、在数据库更新了几行,应该怎么写?
@wendal
3楼中提到的
// 演示aop事务
@IocBean // 需要aop,那当然需要时ioc的bean
public class UserService {
@Inject Dao dao; // 注入NutDao实例,必须的,哈哈
@Aop(TransAop.READ_COMMITTED) // TransAop里面定义5个常量,分别对应不同级别的事务拦截器
public void add(User user) {
dao.insert(user);
dao.update(UserToken.class, Chain.make("xxx","xxx"), Cnd.where(.......);
// 务必注意,必须抛出异常,才能回滚!! 是抛出,不能被catch吃掉.
}
}
// 务必注意,必须抛出异常,才能回滚!! 是抛出,不能被catch吃掉.
这个的意思是要try catch db代码块,并throw?
事例代码里面怎么没有try catch?
不是.
// insert/update抛出异常, 会回滚
@Aop(TransAop.READ_COMMITTED)
public void add(User user) {
dao.insert(user);
dao.update(UserToken.class, Chain.make("xxx","xxx"), Cnd.where(.......);
}
// insert/update抛出异常,但被catch了, 不会回滚
@Aop(TransAop.READ_COMMITTED)
public void add(User user) {
try {
dao.insert(user);
dao.update(UserToken.class, Chain.make("xxx","xxx"), Cnd.where(.......);
} catch (Exception e) {
//把异常吃掉了, 没有继续抛出到add方法之外, 不会回滚.
}
}