Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

batch insertAll has no effect when tx commited #4

Closed
archer-christ opened this issue Jul 27, 2015 · 1 comment
Closed

batch insertAll has no effect when tx commited #4

archer-christ opened this issue Jul 27, 2015 · 1 comment

Comments

@archer-christ
Copy link

Hi ,
I'm using version 6.1.1 of ebean, and integration it with spring .
when batch insertAll commited via spring's tx , it takes no effect , I found com.avaje.ebeaninternal.server.persist.BatchControl#flush(boolean) method did not called from spring's tx commit
==============================testcase===============================
@transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void batchTest(){

    List<User> users = new ArrayList<User>();
    for(int i=0 ;i<5;i++){
        User user = new User();
        user.setName("user"+i);
        users.add(user);
    }

    System.out.println("---------before batch-------");

    Transaction tx = ebeanServer.beginTransaction();
    tx.setBatch(PersistBatch.NONE);
    tx.setBatchOnCascade(PersistBatch.ALL);
    tx.setBatchSize(20);
    ebeanServer.saveAll(users);//

    System.out.println("---------after batch-------");
}

=============================result================================
---------before batch-------
18:40:38.196 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] BatchControl flush [User:100 i:5]
18:40:38.201 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(1,user0,)
18:40:38.202 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(2,user1,)
18:40:38.202 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(3,user2,)
18:40:38.203 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(4,user3,)
18:40:38.203 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(5,user4,)
18:40:38.204 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [1]
18:40:38.205 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [2]
18:40:38.205 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [3]
18:40:38.205 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [4]
18:40:38.205 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [5]
---------after batch-------

it works ,but when I call insertAll method
==============================testcase===============================
@transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void batchTest(){

    List<User> users = new ArrayList<User>();
    for(int i=0 ;i<5;i++){
        User user = new User();
        user.setName("user"+i);
        users.add(user);
    }

    System.out.println("---------before batch-------");

    Transaction tx = ebeanServer.beginTransaction();
    tx.setBatch(PersistBatch.NONE);
    tx.setBatchOnCascade(PersistBatch.ALL);
    tx.setBatchSize(20);
    ebeanServer.insertAll(users);//

    System.out.println("---------after batch-------");
}

=============================result================================
---------before batch-------
18:43:55.662 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(1,user0,)
18:43:55.665 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [1]
18:43:55.666 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(2,user1,)
18:43:55.667 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [2]
18:43:55.667 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(3,user2,)
18:43:55.667 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [3]
18:43:55.668 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(4,user3,)
18:43:55.668 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [4]
18:43:55.668 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(5,user4,)
18:43:55.669 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [5]
---------after batch-------

futher more if i use setBatchMode(true) instead both saveAll and insertAll does not works
==============================testcase===============================
@transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void batchTest(){

    List<User> users = new ArrayList<User>();
    for(int i=0 ;i<5;i++){
        User user = new User();
        user.setName("user"+i);
        users.add(user);
    }

    System.out.println("---------before batch-------");

    Transaction tx = ebeanServer.beginTransaction();
    tx.setBatchMode(true);
    tx.setBatchSize(20);
    ebeanServer.saveAll(users);// do not work

// ebeanServer.insertAll(users);// do not work either

    System.out.println("---------after batch-------");
}

=============================result================================
---------before batch-------
---------after batch-------

If change the batch size smller it works some how
==============================testcase===============================
@transactional(readOnly = false, propagation = Propagation.REQUIRED)
public void batchTest(){

    List<User> users = new ArrayList<User>();
    for(int i=0 ;i<5;i++){
        User user = new User();
        user.setName("user"+i);
        users.add(user);
    }

    System.out.println("---------before batch-------");

    Transaction tx = ebeanServer.beginTransaction();
    tx.setBatchMode(true);
    tx.setBatchSize(2);//change the batch size
    ebeanServer.saveAll(users);// do not work

// ebeanServer.insertAll(users);// do not work either

    System.out.println("---------after batch-------");
}

=============================result================================
---------before batch-------
18:52:02.651 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] BatchControl flush [User:100 i:2]
18:52:02.656 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(1,user0,)
18:52:02.656 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(2,user1,)
18:52:02.658 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [1]
18:52:02.658 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [2]
18:52:02.658 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] BatchControl flush [User:100 i:2]
18:52:02.658 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(3,user2,)
18:52:02.659 [main] TRACE org.avaje.ebean.SQL - txn[s421637524] insert into user (oid, name) values (?,?); --bind(4,user3,)
18:52:02.659 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [3]
18:52:02.659 [main] DEBUG org.avaje.ebean.SUM - txn[s421637524] Inserted [User] [4]
---------after batch-------

@rbygrave
Copy link
Member

Fixed in core - avaje-ebeanorm - by - ebean-orm/ebean#357

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants