PersistenceManager pm = getPM();
Transaction tx = pm.currentTransaction();
TestSO t = null;
try {
tx.begin(); t = (TestSO) pm.getObjectById(pm.newObjectIdInstance(TestSO.class, 1L));
System.out.println(t.getName());

tx.commit();

} catch (Exception e) {
if (tx.isActive()) {
tx.rollback();
}
} finally {
pm.close();
}System.out.println(t.getName());
在上面的代码中,如果屏蔽了第一句 System.out,最后一句的 System.out 会有结果输出。
如果没有屏蔽的话,就输出null了。为什么?

解决方案 »

  1.   

    有查询就要有返回结果,Query接口里一组execute方法来返回查询的结果,具体代码请参考http://www.phome.asia/forum/thread/22687.html 
      

  2.   

    用的是JDO2,实现是DataNucleus。
    在Transaction commit前如果有调用过getter的话,在commit后就再也取不出值了。
    不过没有调用getter的话,就正常。
      

  3.   

    看了一下文档说在Transaction内外访问持久对象是有不同的。谁可以详细说明一下不同在哪里?或给个链接。