mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#996 Add findOne() and findOneOrEmpty()
This commit is contained in:
@@ -33,7 +33,7 @@ public class BeanPostLoadTest extends BaseTestCase {
|
||||
EBasicVer found = ebeanServer.find(EBasicVer.class)
|
||||
.select("name, other")
|
||||
.setId(bean.getId())
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
assertThat(postLoad.methodsCalled).hasSize(1);
|
||||
assertThat(postLoad.methodsCalled).containsExactly("postLoad");
|
||||
|
||||
@@ -1,31 +1,6 @@
|
||||
package io.ebeaninternal.api;
|
||||
|
||||
import io.ebean.AutoTune;
|
||||
import io.ebean.BackgroundExecutor;
|
||||
import io.ebean.BeanState;
|
||||
import io.ebean.CallableSql;
|
||||
import io.ebean.DocumentStore;
|
||||
import io.ebean.ExpressionFactory;
|
||||
import io.ebean.Filter;
|
||||
import io.ebean.FutureIds;
|
||||
import io.ebean.FutureList;
|
||||
import io.ebean.FutureRowCount;
|
||||
import io.ebean.PagedList;
|
||||
import io.ebean.PersistenceContextScope;
|
||||
import io.ebean.Query;
|
||||
import io.ebean.QueryIterator;
|
||||
import io.ebean.SqlQuery;
|
||||
import io.ebean.SqlRow;
|
||||
import io.ebean.SqlUpdate;
|
||||
import io.ebean.Transaction;
|
||||
import io.ebean.TransactionCallback;
|
||||
import io.ebean.TxCallable;
|
||||
import io.ebean.TxRunnable;
|
||||
import io.ebean.TxScope;
|
||||
import io.ebean.Update;
|
||||
import io.ebean.UpdateQuery;
|
||||
import io.ebean.ValuePair;
|
||||
import io.ebean.Version;
|
||||
import io.ebean.*;
|
||||
import io.ebean.bean.BeanCollection;
|
||||
import io.ebean.bean.CallStack;
|
||||
import io.ebean.bean.EntityBeanIntercept;
|
||||
@@ -43,7 +18,6 @@ import io.ebeaninternal.server.core.timezone.DataTimeZone;
|
||||
import io.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
import io.ebeaninternal.server.query.CQuery;
|
||||
import io.ebeaninternal.server.transaction.RemoteTransactionEvent;
|
||||
import io.ebean.TxIsolation;
|
||||
|
||||
import javax.persistence.OptimisticLockException;
|
||||
import javax.persistence.PersistenceException;
|
||||
@@ -51,6 +25,7 @@ import java.lang.reflect.Type;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
import java.util.function.Consumer;
|
||||
import java.util.function.Predicate;
|
||||
@@ -565,6 +540,16 @@ public class TDSpiEbeanServer implements SpiEbeanServer {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T findOne(Query<T> query, Transaction transaction) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> Optional<T> findOneOrEmpty(Query<T> query, Transaction transaction) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public <T> T findUnique(Query<T> query, Transaction transaction) {
|
||||
return null;
|
||||
|
||||
@@ -27,7 +27,7 @@ public class WriteJsonDirtyTest {
|
||||
|
||||
Customer customer = Ebean.find(Customer.class).setId(customers.get(0).getId())
|
||||
.setUseCache(false)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
SpiEbeanServer server = (SpiEbeanServer) Ebean.getServer(null);
|
||||
BeanDescriptor<Customer> descriptor = server.getBeanDescriptor(Customer.class);
|
||||
|
||||
@@ -54,7 +54,7 @@ public class JdbcTransactionTest {
|
||||
contactNatKeyCache.getStatistics(true);
|
||||
|
||||
Customer.find.byId(19898989);
|
||||
Ebean.find(Contact.class).where().eq("email", "junk@foo.com").findUnique();
|
||||
Ebean.find(Contact.class).where().eq("email", "junk@foo.com").findOne();
|
||||
|
||||
assertThat(customerBeanCache.getStatistics(true).getMissCount()).isEqualTo(1);
|
||||
assertThat(contactNatKeyCache.getStatistics(true).getMissCount()).isEqualTo(1);
|
||||
@@ -64,7 +64,7 @@ public class JdbcTransactionTest {
|
||||
|
||||
// these don't hit L2 cache due to the save of b1
|
||||
Customer.find.byId(29898989);
|
||||
Ebean.find(Contact.class).where().eq("email", "junk2@foo.com").findUnique();
|
||||
Ebean.find(Contact.class).where().eq("email", "junk2@foo.com").findOne();
|
||||
|
||||
assertThat(customerBeanCache.getStatistics(true).getMissCount()).isEqualTo(0);
|
||||
assertThat(contactNatKeyCache.getStatistics(true).getMissCount()).isEqualTo(0);
|
||||
|
||||
@@ -21,7 +21,7 @@ public class AutofetchEmbeddedTest extends BaseTestCase {
|
||||
testBean.getEmbeddable().setDescription("test description");
|
||||
Ebean.save(testBean);
|
||||
|
||||
EMain partialBean = Ebean.find(EMain.class).select("version").setId(testBean.getId()).findUnique();
|
||||
EMain partialBean = Ebean.find(EMain.class).select("version").setId(testBean.getId()).findOne();
|
||||
|
||||
logger.info(" -- invoke lazy loading of embedded bean");
|
||||
Eembeddable embeddable = partialBean.getEmbeddable();
|
||||
|
||||
@@ -47,7 +47,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
|
||||
Order order = query.findUnique();
|
||||
Order order = query.findOne();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
@@ -76,7 +76,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
Order order = query.findOne();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
@@ -119,7 +119,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
Order order = query.findOne();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
@@ -154,7 +154,7 @@ public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Order order = query.findUnique();
|
||||
Order order = query.findOne();
|
||||
EntityBean eb = (EntityBean) order;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@ public class TunedQueryWithNullFetchedBeanTest extends BaseTestCase {
|
||||
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
Customer customer = query.findUnique();
|
||||
Customer customer = query.findOne();
|
||||
EntityBean eb = (EntityBean) customer;
|
||||
EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
|
||||
|
||||
@@ -19,7 +19,7 @@ public class TestDeleteImportedPartial extends BaseTestCase {
|
||||
Integer contentId = persistentFile.getFileContent().getId();
|
||||
|
||||
PFile partialPfile = Ebean.find(PFile.class).select("id").where().idEq(persistentFile.getId())
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
// should delete file and fileContent
|
||||
Ebean.delete(partialPfile);
|
||||
|
||||
@@ -20,7 +20,7 @@ public class TestDeletePartialNoVersion extends BaseTestCase {
|
||||
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
|
||||
.where().idEq(e.getId())
|
||||
.select("id, name")
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
Assert.assertNotNull(e2);
|
||||
|
||||
@@ -42,7 +42,7 @@ public class TestDeletePartialNoVersion extends BaseTestCase {
|
||||
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
|
||||
.where().idEq(e.getId())
|
||||
.select("id, name, version")
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
Assert.assertNotNull(e2);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class TestLazyLoadEmptyOneToMany extends BaseTestCase {
|
||||
.select("id")
|
||||
.fetch("contacts", "id")
|
||||
.where().idEq(c.getId())
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
List<Contact> contacts = c1.getContacts();
|
||||
int sz = contacts.size();
|
||||
|
||||
@@ -37,7 +37,7 @@ public class TestLazyLoadInCache extends BaseTestCase {
|
||||
Customer cust1B = Ebean.find(Customer.class)
|
||||
.setReadOnly(true)
|
||||
.setId(id)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
assertTrue(cust1 != cust1B);
|
||||
|
||||
|
||||
@@ -20,7 +20,7 @@ public class TestMappedSuper extends BaseTestCase {
|
||||
TMapSuperEntity e2 = Ebean.find(TMapSuperEntity.class)
|
||||
.where().idEq(e.getId())
|
||||
.select("id, name, myint, someObject, bananan")
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
Assert.assertNotNull(e2);
|
||||
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TestPersistenceContext extends BaseTestCase {
|
||||
Customer customer = Ebean.find(Customer.class)
|
||||
.setUseCache(false)
|
||||
.setId(id)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
System.gc();
|
||||
Order order2 = Ebean.find(Order.class, orderId);
|
||||
|
||||
@@ -63,7 +63,7 @@ public class TestQueryForUpdate extends BaseTestCase {
|
||||
.where().idEq(first.getId())
|
||||
.forUpdateNoWait();
|
||||
|
||||
server.findUnique(query2, txn2);
|
||||
server.findOne(query2, txn2);
|
||||
assertTrue(false); // never get here
|
||||
} catch (AcquireLockException e) {
|
||||
logger.info("... got AcquireLockException " + e);
|
||||
|
||||
@@ -49,7 +49,7 @@ public class TestQueryWithCache extends BaseTestCase {
|
||||
Country nz3 = Ebean.find(Country.class, "NZ");
|
||||
|
||||
Country nz4 = Ebean.find(Country.class).setId("NZ").setAutoTune(false).setUseCache(false)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
assertTrue(nz2 == nz2b);
|
||||
assertTrue(nz2 == nz3);
|
||||
@@ -65,7 +65,7 @@ public class TestQueryWithCache extends BaseTestCase {
|
||||
Ebean.find(Country.class, "NZ");
|
||||
|
||||
Query<Country> query = Ebean.find(Country.class).setId("NZ").setUseCache(false);
|
||||
query.findUnique();
|
||||
query.findOne();
|
||||
|
||||
assertThat(query.getGeneratedSql()).isNotNull();
|
||||
}
|
||||
|
||||
@@ -27,7 +27,7 @@ public class TestReadOnlyPropagation extends BaseTestCase {
|
||||
.setUseCache(false)
|
||||
.setReadOnly(true)
|
||||
.setId(1)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
Assert.assertTrue(Ebean.getBeanState(order).isReadOnly());
|
||||
|
||||
|
||||
@@ -30,7 +30,7 @@ public class TestSharedInstancePropagation extends BaseTestCase {
|
||||
.setAutoTune(false)
|
||||
.setReadOnly(true)
|
||||
.setId(1)
|
||||
.findUnique();
|
||||
.findOne();
|
||||
|
||||
|
||||
assertNotNull(order);
|
||||
|
||||
@@ -18,7 +18,7 @@ public class TestTransient extends BaseTestCase {
|
||||
Ebean.save(cnew);
|
||||
Integer custId = cnew.getId();
|
||||
|
||||
Customer c = Ebean.find(Customer.class).setAutoTune(false).setId(custId).findUnique();
|
||||
Customer c = Ebean.find(Customer.class).setAutoTune(false).setId(custId).findOne();
|
||||
|
||||
Assert.assertNotNull(c);
|
||||
|
||||
|
||||
@@ -27,7 +27,7 @@ public class TestWhereAnnotation extends BaseTestCase {
|
||||
Query<Customer> q1 = Ebean.find(Customer.class).setUseCache(false).fetch("orders").where()
|
||||
.idEq(1).query();
|
||||
|
||||
q1.findUnique();
|
||||
q1.findOne();
|
||||
String s1 = q1.getGeneratedSql();
|
||||
Assert.assertTrue(s1.contains("t1.order_date is not null"));
|
||||
}
|
||||
|
||||
@@ -0,0 +1,42 @@
|
||||
package org.tests.query;
|
||||
|
||||
import io.ebean.BaseTestCase;
|
||||
import io.ebean.Ebean;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
import static org.assertj.core.api.StrictAssertions.assertThat;
|
||||
|
||||
public class TestFindOneOrEmpty extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void empty() {
|
||||
|
||||
Optional<Customer> willBeEmpty = Ebean.find(Customer.class)
|
||||
.setId(Integer.MAX_VALUE)
|
||||
.findOneOrEmpty();
|
||||
|
||||
assertThat(willBeEmpty).isEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void notEmpty() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Optional<Customer> customer = Ebean.find(Customer.class)
|
||||
.setId(1)
|
||||
.findOneOrEmpty();
|
||||
|
||||
assertThat(customer.isPresent()).isTrue();
|
||||
|
||||
customer.ifPresent(customer1 -> {
|
||||
String name = customer1.getName();
|
||||
assertThat(name).isNotEmpty();
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user