diff --git a/src/main/java/com/avaje/ebean/EbeanServer.java b/src/main/java/com/avaje/ebean/EbeanServer.java index 17d248f39..5c74bcb1f 100644 --- a/src/main/java/com/avaje/ebean/EbeanServer.java +++ b/src/main/java/com/avaje/ebean/EbeanServer.java @@ -1205,7 +1205,6 @@ public interface EbeanServer { * public class Order { ... * * @OneToMany(cascade=CascadeType.ALL, mappedBy="order") - * @JoinColumn(name="order_id") * List details; * ... * } @@ -1235,9 +1234,9 @@ public interface EbeanServer { void delete(Object bean) throws OptimisticLockException; /** - * Delete all the beans in the collection. + * Delete the bean with an explicit transaction. */ - int deleteAll(Collection beans) throws OptimisticLockException; + void delete(Object bean, Transaction transaction) throws OptimisticLockException; /** * Delete the bean given its type and id. @@ -1249,6 +1248,16 @@ public interface EbeanServer { */ int delete(Class beanType, Object id, Transaction transaction); + /** + * Delete all the beans in the collection. + */ + int deleteAll(Collection beans) throws OptimisticLockException; + + /** + * Delete all the beans in the collection using an explicit transaction. + */ + int deleteAll(Collection beans, Transaction transaction) throws OptimisticLockException; + /** * Delete several beans given their type and id values. */ @@ -1260,11 +1269,6 @@ public interface EbeanServer { */ void deleteAll(Class beanType, Collection ids, Transaction transaction); - /** - * Delete the bean with an explicit transaction. - */ - void delete(Object bean, Transaction transaction) throws OptimisticLockException; - /** * Execute a Sql Update Delete or Insert statement. This returns the number of * rows that where updated, deleted or inserted. If is executed in batch then diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java index 470c67cd6..abe827eb8 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/DefaultServer.java @@ -1180,7 +1180,7 @@ public final class DefaultServer implements SpiEbeanServer { BeanDescriptor desc = beanDescriptorManager.getBeanDescriptor(query.getBeanType()); - T bean = desc.cacheNaturalKeyLookup((SpiQuery)query, (SpiTransaction) t); + T bean = desc.cacheNaturalKeyLookup((SpiQuery) query, (SpiTransaction) t); if (bean != null) { return bean; } @@ -1779,6 +1779,14 @@ public final class DefaultServer implements SpiEbeanServer { return deleteAllInternal(beans.iterator(), null); } + /** + * Delete all the beans in the collection. + */ + @Override + public int deleteAll(Collection beans, Transaction t) { + return deleteAllInternal(beans.iterator(), t); + } + /** * Delete all the beans in the iterator with an explicit transaction. */ diff --git a/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java b/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java new file mode 100644 index 000000000..bb96d3f24 --- /dev/null +++ b/src/test/java/com/avaje/ebean/EbeanServer_saveAllTest.java @@ -0,0 +1,128 @@ +package com.avaje.ebean; + +import com.avaje.tests.model.basic.EBasicVer; +import org.avaje.ebeantest.LoggedSqlCollector; +import org.junit.Test; + +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + + +public class EbeanServer_saveAllTest { + + @Test + public void saveAll() { + + List someBeans = beans(3); + + // act + LoggedSqlCollector.start(); + Ebean.saveAll(someBeans); + + // assert + List loggedSql = LoggedSqlCollector.stop(); + for (String insertSql : loggedSql) { + assertThat(insertSql).contains("insert into e_basicver (id, name, description, other, last_update) values ("); + } + + for (EBasicVer someBean : someBeans) { + someBean.setName(someBean.getName()+"-mod"); + } + + // act + LoggedSqlCollector.start(); + Ebean.updateAll(someBeans); + + loggedSql = LoggedSqlCollector.stop(); + for (String updateSql : loggedSql) { + assertThat(updateSql).contains("update e_basicver set name=?, last_update=? where id=? "); + } + + + // act + LoggedSqlCollector.start(); + Ebean.deleteAll(someBeans); + + loggedSql = LoggedSqlCollector.stop(); + for (String updateSql : loggedSql) { + assertThat(updateSql).contains("delete from e_basicver where id=? "); + } + + } + + + @Test + public void saveAll_withTransaction() { + + List someBeans = beans(3); + EbeanServer server = Ebean.getDefaultServer(); + + // act + LoggedSqlCollector.start(); + Transaction txn = server.beginTransaction(); + try { + server.saveAll(someBeans, txn); + txn.commit(); + } finally { + txn.end(); + } + + // assert + List loggedSql = LoggedSqlCollector.stop(); + for (String insertSql : loggedSql) { + assertThat(insertSql).contains("insert into e_basicver (id, name, description, other, last_update) values ("); + } + + for (EBasicVer someBean : someBeans) { + someBean.setName(someBean.getName() + "-mod"); + } + + // act + LoggedSqlCollector.start(); + txn = server.beginTransaction(); + try { + server.updateAll(someBeans, txn); + txn.commit(); + } finally { + txn.end(); + } + loggedSql = LoggedSqlCollector.stop(); + for (String updateSql : loggedSql) { + assertThat(updateSql).contains("update e_basicver set name=?, last_update=? where id=? "); + } + + + // act + LoggedSqlCollector.start(); + txn = server.beginTransaction(); + try { + server.deleteAll(someBeans, txn); + txn.commit(); + } finally { + txn.end(); + } + loggedSql = LoggedSqlCollector.stop(); + for (String updateSql : loggedSql) { + assertThat(updateSql).contains("delete from e_basicver where id=? "); + } + + } + + + + private List beans(int count) { + List beans = new ArrayList(); + for (int i = 0; i beans, Transaction transaction) throws OptimisticLockException { + return 0; + } + @Override public void deleteAll(Class beanType, Collection ids) {