package org.tests.model.basic.xtra; import io.ebean.BaseTestCase; import io.ebean.Ebean; import io.ebean.Transaction; import io.ebean.PersistBatch; import org.ebeantest.LoggedSqlCollector; import org.junit.Test; import java.util.ArrayList; import java.util.List; import static org.junit.Assert.assertEquals; public class TestInsertBatchWithDifferentRootTypes extends BaseTestCase { @Test public void testDifferRootTypes() { if (isSqlServer()) return; LoggedSqlCollector.start(); Transaction txn = Ebean.beginTransaction(); try { txn.setBatch(PersistBatch.ALL); EdParent parent = new EdParent(); parent.setName("MyComputer"); EdChild child = new EdChild(); child.setName("Harddisk 123"); child.setParent(parent); ArrayList<EdChild> children = new ArrayList<>(); children.add(child); parent.setChildren(children); Ebean.save(parent); EdExtendedParent extendedParent = new EdExtendedParent(); extendedParent.setName("My second computer"); extendedParent.setExtendedName("Multimedia"); child = new EdChild(); child.setName("DVBS Card"); children = new ArrayList<>(); children.add(child); extendedParent.setChildren(children); // nothing flushed yet List<String> loggedSql0 = LoggedSqlCollector.start(); assertEquals(0, loggedSql0.size()); // causes a flush as EdExtendedParent is different from EdParent Ebean.save(extendedParent); // insert statements for EdParent List<String> loggedSql1 = LoggedSqlCollector.start(); assertEquals(2, loggedSql1.size()); Ebean.commitTransaction(); // insert statements for EdExtendedParent List<String> loggedSql2 = LoggedSqlCollector.start(); assertEquals(2, loggedSql2.size()); } finally { Ebean.endTransaction(); } } }