package org.tests.transaction; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.EbeanServer; import io.ebean.Transaction; import io.ebean.PersistBatch; import org.tests.model.basic.UTDetail; import org.tests.model.basic.UTMaster; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.util.List; import static org.junit.Assert.assertTrue; public class TestBatchPersistCascade extends BaseTestCase { Logger logger = LoggerFactory.getLogger(TestBatchPersistCascade.class); @Test public void test() { if (isSqlServer()) return; EbeanServer ebeanServer = Ebean.getServer(null); LoggedSqlCollector.start(); Transaction txn = ebeanServer.beginTransaction(); try { txn.setBatch(PersistBatch.INSERT); logger.info("start ------------"); for (int i = 0; i < 3; i++) { UTMaster master = createMaster(i); logger.info("save ------------ {}", i); ebeanServer.save(master); //txn.flushBatch(); } logger.info("commit ------------"); txn.commit(); } finally { txn.end(); } List<String> loggedSql = LoggedSqlCollector.stop(); assertTrue(loggedSql.size() > 2); testUpdates(); } private void testUpdates() { EbeanServer server = Ebean.getServer(null); List<UTMaster> list = server.find(UTMaster.class).fetch("details").findList(); Transaction txn = server.beginTransaction(); try { txn.setBatch(PersistBatch.INSERT); txn.setBatchOnCascade(PersistBatch.ALL); for (int i = 0; i < 3; i++) { UTMaster master = createMaster(i + 500); logger.info("save ------------ {}", i); server.save(master); } logger.info("starting updates ------------ "); UTMaster lastMaster = null; for (UTMaster utMaster : list) { utMaster.setName(utMaster.getName() + " + mod"); List<UTDetail> details = utMaster.getDetails(); for (UTDetail detail : details) { detail.setQty(detail.getQty() + 7); detail.setName(detail.getName() + " + foo"); } server.save(utMaster); lastMaster = utMaster; } logger.info("starting some inserts ------------ "); for (int i = 0; i < 3; i++) { UTMaster master = createMaster(i + 1000); logger.info("save ------------ {}", i); server.save(master); if (i == 1) { logger.info("save lastMaster ------------ "); lastMaster.setName("mod"); server.save(lastMaster); } } logger.info("commit ------------ "); server.commitTransaction(); } finally { server.endTransaction(); } } private UTDetail createUTDetail(String master, int count) { UTDetail detail = new UTDetail(); detail.setName(master + "-" + count); detail.setAmount(50d); detail.setQty(count); return detail; } private UTMaster createMaster(int count) { String name = "master" + count; UTMaster m0 = new UTMaster(); m0.setName(name); for (int i = 0; i < 5; i++) { m0.addDetail(createUTDetail(name, i)); } return m0; } }