0

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();

}
4

2 に答える 2

0

最終的に解決策を見つけました。私のために働きます。

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();
}

このソリューションに問題がある場合は、コメントを追加してください。

Ebean ドキュメントの例: http://www.avaje.org/ebean/introtrans_begin.html

于 2013-07-10T10:50:28.030 に答える