mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#1427 - QueryCache should be cleared, if one of a dependent bean is updated
Refactor on PostCommitProcessing with fixes for dependent table invalidation
This commit is contained in:
@@ -5,6 +5,7 @@ import io.ebean.Ebean;
|
||||
import io.ebean.cache.ServerCache;
|
||||
import org.junit.Test;
|
||||
import org.tests.model.basic.Address;
|
||||
import org.tests.model.basic.Contact;
|
||||
import org.tests.model.basic.Customer;
|
||||
import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
@@ -46,7 +47,7 @@ public class TestQueryCacheTableDependency extends BaseTestCase {
|
||||
.where().eq("billingAddress.line2", "St Lukes")
|
||||
.findCount();
|
||||
|
||||
assertThat(custs).isEqualTo(2); // cache says 3
|
||||
assertThat(custs).isEqualTo(2);
|
||||
|
||||
|
||||
custs = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
@@ -55,5 +56,70 @@ public class TestQueryCacheTableDependency extends BaseTestCase {
|
||||
|
||||
assertThat(custs).isEqualTo(1);
|
||||
|
||||
Ebean.update(Address.class)
|
||||
.set("line2", "St Lucky2")
|
||||
.where().eq("line2", "St Lucky")
|
||||
.update();
|
||||
|
||||
custs = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where().eq("billingAddress.line2", "St Lucky")
|
||||
.findCount();
|
||||
|
||||
assertThat(custs).isEqualTo(0);
|
||||
|
||||
custs = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where().eq("billingAddress.line2", "St Lucky2")
|
||||
.findCount();
|
||||
assertThat(custs).isEqualTo(1);
|
||||
|
||||
Ebean.createSqlUpdate("update O_ADDRESS set line_2=? where line_2=?")
|
||||
.setNextParameter("St Lucky3")
|
||||
.setNextParameter("St Lucky2")
|
||||
.execute();
|
||||
|
||||
custs = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where().eq("billingAddress.line2", "St Lucky2")
|
||||
.findCount();
|
||||
assertThat(custs).isEqualTo(0);
|
||||
|
||||
custs = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where().eq("billingAddress.line2", "St Lucky3")
|
||||
.findCount();
|
||||
|
||||
assertThat(custs).isEqualTo(1);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testFindCountOnOtherL2Cached() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Customer fi = Ebean.find(Customer.class).where().eq("name", "Fiona").findOne();
|
||||
|
||||
int custCount0 = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where()
|
||||
.eq("name", "Fiona")
|
||||
.isNull("contacts.phone")
|
||||
.findCount();
|
||||
|
||||
assertThat(custCount0).isEqualTo(1);
|
||||
|
||||
int updateRows = Ebean.update(Contact.class)
|
||||
.set("phone", "1234")
|
||||
.where()
|
||||
.eq("customer.id", fi.getId())
|
||||
.update();
|
||||
|
||||
assertThat(updateRows).isGreaterThan(0);
|
||||
|
||||
int custCount1 = Ebean.find(Customer.class).setUseQueryCache(true).setReadOnly(true)
|
||||
.where()
|
||||
.eq("name", "Fiona")
|
||||
.isNull("contacts.phone")
|
||||
.findCount();
|
||||
|
||||
assertThat(custCount1).isEqualTo(0);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user