I have problem with understanding how to work with ebean transactions under play 2.1.1.
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();
}
But in this case I receive error: PersistenceException: The existing transaction still active?
Also I've try to make something like:
@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();
}
In this case I receive updated values. Also in last example I've try rollback in this way: Ebean.currentTransaction().end();
But receive NullPointerException error.
Could some one point me to workable example with transactions? Or write some example in comments.
Thanks.
UPDATE
Eventually have found solution:
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();
}
begin
,rollback
,commit
directly. The problem you're pointing is a bug of Ebean : github.com/ebean-orm/avaje-ebeanorm/pull/44. Try to upgrade your version of Play – Tinderbox