Java 在GAE中使用Jdo的事务无法回滚,尽管代码正在成功执行
正如代码所反映的,事务正在成功回滚。但是,在事务中执行的操作没有反映到数据库中,并且没有在tx的非提交活动状态下回滚,即当使用PMF的tx(事务)和DynaPMF rollback撤消删除记录时,操作不起作用 在这里,PMF、DynaPMF指的是两个不同数据库的两个不同PersistanceMangerFactoryJava 在GAE中使用Jdo的事务无法回滚,尽管代码正在成功执行,java,google-app-engine,jdo,rollback,datastore,Java,Google App Engine,Jdo,Rollback,Datastore,正如代码所反映的,事务正在成功回滚。但是,在事务中执行的操作没有反映到数据库中,并且没有在tx的非提交活动状态下回滚,即当使用PMF的tx(事务)和DynaPMF rollback撤消删除记录时,操作不起作用 在这里,PMF、DynaPMF指的是两个不同数据库的两个不同PersistanceMangerFactory if (isTransactionLocal || (PMF.getTransactionCounter() > 0 || DynaPMF.getTransactio
if (isTransactionLocal || (PMF.getTransactionCounter() > 0 || DynaPMF.getTransactionCounter() > 0)) {
//tx.rollback();
if(PMF.getPerThreadTransaction()!=null){
tx=PMF.getPerThreadTransaction();
System.err.println(tx.hashCode()+"transaction thread is Alive =>"+tx.isActive());
if(tx.isActive()){
tx.rollback();
System.err.println("rollback for tx = "+tx.hashCode()+" done .");
}
}
if(DynaPMF.getPerThreadTransaction()!=null){
tx=DynaPMF.getPerThreadTransaction();
System.err.println(tx.hashCode()+"transaction thread is Alive =>"+tx.isActive());
if(tx.isActive()){
tx.rollback();
System.err.println("rollback for tx = "+tx.hashCode()+" done .");
}
}
PMF.setPerThreadTransaction(null);
DynaPMF.setPerThreadTransaction(null);
输出:
1861140113transaction thread is Alive =>true
rollback for tx = 1861140113 done .
336180090transaction thread is Alive =>true
rollback for tx = 336180090 done .
代码中显示回滚成功发生,但未反映在数据库中。根据JDO,回滚只能在JDO生命周期中具有持久性清除状态的对象上执行,如图所示
并且从其他状态回滚不能反映到数据存储。根据JDO,回滚只能在JDO生命周期中具有持久性干净状态的对象上执行,如图所示 从其他状态回滚无法反映到数据存储中。请阅读-总结是,这不是解决志愿者问题的理想方法,可能会对获得答案产生反作用。请不要将此添加到您的问题中。请阅读-总结是,这不是解决志愿者问题的理想方式,可能会对获得答案产生反作用。请不要将此添加到您的问题中。