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: The existing transaction still active?
また、私は次のようなものを作ろうとしました:
@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();
}