mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Fix for #209 - refresh() ... does not refresh OneToMany or ManyToMany properties
This commit is contained in:
@@ -1,12 +1,13 @@
|
||||
package com.avaje.tests.batchload;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.FetchConfig;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertNotNull;
|
||||
|
||||
public class TestSecondQueryNoRows extends BaseTestCase {
|
||||
|
||||
@@ -18,9 +19,13 @@ public class TestSecondQueryNoRows extends BaseTestCase {
|
||||
|
||||
Ebean.save(cnew);
|
||||
|
||||
Customer c = Ebean.find(Customer.class).setAutofetch(false).setId(cnew.getId())
|
||||
.fetch("contacts", new FetchConfig().query()).findUnique();
|
||||
Customer c = Ebean.find(Customer.class)
|
||||
.setAutofetch(false)
|
||||
.setId(cnew.getId())
|
||||
.fetch("contacts", new FetchConfig().query())
|
||||
.findUnique();
|
||||
|
||||
Assert.assertNotNull(c);
|
||||
assertNotNull(c);
|
||||
assertEquals(0, c.getContacts().size());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,60 +0,0 @@
|
||||
package com.avaje.tests.model.basic;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import com.avaje.ebean.Ebean;
|
||||
|
||||
public class DMLTest extends TestCase {
|
||||
|
||||
public DMLTest() {
|
||||
}
|
||||
|
||||
public static void main(String[] args) {
|
||||
DMLTest dmlTest = new DMLTest();
|
||||
dmlTest.deleteAll();
|
||||
dmlTest.insertData();
|
||||
}
|
||||
|
||||
public void test() {
|
||||
Assert.assertTrue(true);
|
||||
}
|
||||
|
||||
public void deleteAll() {
|
||||
Ebean.beginTransaction();
|
||||
try {
|
||||
Ebean.createUpdate(Phone.class, "delete from phone").execute();
|
||||
|
||||
Ebean.createUpdate(Person.class, "delete from person").execute();
|
||||
|
||||
Ebean.commitTransaction();
|
||||
} finally {
|
||||
Ebean.endTransaction();
|
||||
}
|
||||
}
|
||||
|
||||
private void insertData() {
|
||||
Person person = new Person();
|
||||
person.setSurname("Kosinov");
|
||||
person.setName("Yaroslav");
|
||||
Phone phone = new Phone();
|
||||
phone.setPhoneNumber("5244011");
|
||||
List<Phone> phones = new ArrayList<Phone>();
|
||||
phones.add(phone);
|
||||
person.setPhones(phones);
|
||||
Ebean.save(person);
|
||||
|
||||
person = new Person();
|
||||
person.setSurname("Kosinov");
|
||||
person.setName("Gennady");
|
||||
phone = new Phone();
|
||||
phone.setPhoneNumber("5712658");
|
||||
phone.setPerson(person);
|
||||
Ebean.save(phone);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
@@ -1,16 +1,18 @@
|
||||
package com.avaje.tests.query;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.FetchConfig;
|
||||
import com.avaje.ebean.Query;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.Order;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
import org.avaje.ebeantest.LoggedSqlCollector;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
|
||||
public class TestQueryFilterMany extends BaseTestCase {
|
||||
|
||||
@@ -19,20 +21,23 @@ public class TestQueryFilterMany extends BaseTestCase {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Query<Customer> query = Ebean.find(Customer.class).fetch("orders", new FetchConfig().lazy())
|
||||
.where().ilike("name", "Rob%").filterMany("orders").eq("status", Order.Status.NEW).where()
|
||||
.gt("id", 0).query();
|
||||
LoggedSqlCollector.start();
|
||||
|
||||
// query.filterMany("orders").eq("status", Order.Status.NEW);
|
||||
Customer customer = Ebean.find(Customer.class)
|
||||
.fetch("orders", new FetchConfig().lazy())
|
||||
.filterMany("orders").eq("status", Order.Status.NEW)
|
||||
.where().ieq("name", "Rob")
|
||||
.order().asc("id").setMaxRows(1)
|
||||
.findList().get(0);
|
||||
|
||||
List<Customer> list = query.findList();
|
||||
for (Customer customer : list) {
|
||||
customer.getOrders().size();
|
||||
}
|
||||
customer.getOrders().size();
|
||||
|
||||
Customer c0 = list.get(0);
|
||||
System.out.println("......... refreshMany ...");
|
||||
Ebean.refreshMany(c0, "orders");
|
||||
List<String> sqlList = LoggedSqlCollector.stop();
|
||||
assertEquals(2, sqlList.size());
|
||||
assertTrue(sqlList.get(1).contains("status = ?"));
|
||||
|
||||
// Currently this does not include the query filter
|
||||
Ebean.refreshMany(customer, "orders");
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,88 @@
|
||||
package com.avaje.tests.refresh;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.SqlRow;
|
||||
import com.avaje.tests.model.basic.Contact;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
||||
public class TestRefreshWithMany extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
Customer customer = ResetBasicData.createCustomer("refresher", "22 refresh set", "23 fresh", 9);
|
||||
|
||||
Ebean.save(customer);
|
||||
|
||||
assertEquals(3, customer.getContacts().size());
|
||||
|
||||
int rc = Ebean.createSqlUpdate("update o_customer set name = :name where id = :id")
|
||||
.setParameter("name", "ref-modified")
|
||||
.setParameter("id", customer.getId())
|
||||
.execute();
|
||||
|
||||
int rc2 = Ebean.createSqlUpdate("update contact set first_name = first_name || '-mod' where customer_id = :id")
|
||||
.setParameter("id", customer.getId())
|
||||
.execute();
|
||||
|
||||
assertEquals(1, rc);
|
||||
assertEquals(3, rc2);
|
||||
|
||||
System.out.println("-------------------------- prior");
|
||||
Ebean.refresh(customer);
|
||||
System.out.println("-------------------------- after");
|
||||
|
||||
assertEquals("ref-modified", customer.getName());
|
||||
assertEquals(3, customer.getContacts().size());
|
||||
assertEquals(true, customer.getContacts().get(0).getFirstName().endsWith("-mod"));
|
||||
|
||||
|
||||
// now try again when the bean is fully loaded
|
||||
Customer customer1 = Ebean.find(Customer.class)
|
||||
.fetch("contacts")
|
||||
.setId(customer.getId())
|
||||
.findUnique();
|
||||
|
||||
|
||||
int rcb1 = Ebean.createSqlUpdate("update o_customer set name = :name where id = :id")
|
||||
.setParameter("name", "ref-modified-again")
|
||||
.setParameter("id", customer.getId())
|
||||
.execute();
|
||||
|
||||
int rcb2 = Ebean.createSqlUpdate("update contact set first_name = :first, last_name='foo' where customer_id = :id")
|
||||
.setParameter("id", customer.getId())
|
||||
.setParameter("first","-alt")
|
||||
.execute();
|
||||
|
||||
List<SqlRow> sqlRows = Ebean.createSqlQuery("select id, first_name, last_name from contact").findList();
|
||||
for (SqlRow sqlRow : sqlRows) {
|
||||
System.out.println("row: "+sqlRow.get("id")+" "+sqlRow.get("first_name")+" "+sqlRow.get("last_name"));
|
||||
}
|
||||
|
||||
assertEquals(1, rcb1);
|
||||
assertEquals(3, rcb2);
|
||||
|
||||
System.out.println("-------------------------- prior2");
|
||||
Ebean.refresh(customer1);
|
||||
System.out.println("-------------------------- after2");
|
||||
|
||||
assertEquals("ref-modified-again", customer1.getName());
|
||||
System.out.println("-------------------------- after2a");
|
||||
assertEquals(3, customer1.getContacts().size());
|
||||
System.out.println("-------------------------- after2b");
|
||||
for (Contact contact : customer1.getContacts()) {
|
||||
System.out.println("hello "+contact.getId()+" "+contact.getFirstName()+" "+contact.getLastName());
|
||||
}
|
||||
assertEquals(true, customer1.getContacts().get(0).getFirstName().endsWith("-alt"));
|
||||
|
||||
}
|
||||
}
|
||||
@@ -2,6 +2,7 @@ package com.avaje.tests.text.csv;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.junit.Test;
|
||||
@@ -20,7 +21,8 @@ public class TestCsvReader extends BaseTestCase {
|
||||
ResetBasicData.reset();
|
||||
|
||||
try {
|
||||
File f = new File("src/test/resources/test1.csv");
|
||||
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
|
||||
File f = new File(resource.getFile());
|
||||
|
||||
FileReader reader = new FileReader(f);
|
||||
|
||||
|
||||
@@ -2,6 +2,7 @@ package com.avaje.tests.text.csv;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.FileReader;
|
||||
import java.net.URL;
|
||||
import java.util.Locale;
|
||||
|
||||
import org.junit.Test;
|
||||
@@ -21,7 +22,8 @@ public class TestCsvReaderWithCallback extends BaseTestCase {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
File f = new File("src/test/resources/test1.csv");
|
||||
URL resource = TestCsvReaderWithCallback.class.getResource("/test1.csv");
|
||||
File f = new File(resource.getFile());
|
||||
|
||||
FileReader reader = new FileReader(f);
|
||||
|
||||
|
||||
@@ -1,50 +0,0 @@
|
||||
package com.avaje.tests.text.json;
|
||||
|
||||
import java.io.StringReader;
|
||||
import java.util.List;
|
||||
<<<<<<< HEAD
|
||||
import java.util.Map;
|
||||
=======
|
||||
>>>>>>> json-refactor
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.ebean.text.json.JsonContext;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
import com.avaje.tests.model.basic.ResetBasicData;
|
||||
|
||||
public class TestTextJsonBeanReadVisitor extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
ResetBasicData.reset();
|
||||
|
||||
List<Customer> list = Ebean.find(Customer.class)
|
||||
.select("id, name, status, shippingAddress")
|
||||
.fetch("billingAddress", "line1, city")
|
||||
.fetch("billingAddress.country", "*")
|
||||
.fetch("contacts", "firstName,email")
|
||||
.order().desc("id").findList();
|
||||
|
||||
JsonContext json = Ebean.createJsonContext();
|
||||
|
||||
|
||||
String s = json.toJsonString(list);
|
||||
System.out.println(s);
|
||||
|
||||
List<Customer> mList = json.toList(Customer.class, s);
|
||||
System.out.println("VIA STRING: " + mList);
|
||||
|
||||
StringReader reader = new StringReader(s);
|
||||
List<Customer> mList2 = json.toList(Customer.class, reader);
|
||||
System.out.println("VIA READER: " + mList2);
|
||||
|
||||
Assert.assertEquals(mList.size(), mList2.size());
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user