我无法理解如何在 play 2.1.1 下使用 ebean 事务。
Ebean.execute(txScope, new TxRunnable() {
public void run() {
Ebean.beginTransaction();
System.out.println("[**] : " + Ebean.currentTransaction());
User user = Ebean.find(User.class, 22);
user.setPassword("qweqwe125");
Ebean.save(user);
user = Ebean.find(User.class, 22);
user.setPassword("qweqwe126");
Ebean.rollbackTransaction();
// or other case
//Ebean.currentTransaction().rollback();
}
但在这种情况下,我收到错误:PersistenceException:现有事务仍然有效?
我也尝试做类似的东西:
@Transactional(type=TxType.REQUIRES_NEW, isolation = TxIsolation.SERIALIZABLE)
public static void transactional2() {
User user = User.query.getById(22l);
user.setPassword("qweqwe123");
user.save();
Ebean.endTransaction();
}
在这种情况下,我会收到更新的值。同样在最后一个示例中,我尝试以这种方式回滚: Ebean.currentTransaction().end();
但收到 NullPointerException 错误。
有人可以指出我的交易示例吗?或者在评论中写一些例子。
谢谢。
更新
终于找到了解决办法:
public static void transactional2() {
com.avaje.ebean.Ebean.beginTransaction();
User user = User.query.getById(22l);
user.setPassword("qweqwe123");
user.save();
com.avaje.ebean.Ebean.rollbackTransaction();
// OR: com.avaje.ebean.Ebean.commitTransaction();
}