mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
Fixes for #94 - Additional API - added update(Collection beans); and insert(Collection beans); and #93 - ebean.properties defaultDeleteMissingChildren moved to updatesDeleteMissingChildren
This commit is contained in:
@@ -32,7 +32,7 @@ public class TestCKeyLazyLoad extends BaseTestCase {
|
||||
p.add(new CKeyDetail("somethine one"));
|
||||
p.add(new CKeyDetail("somethine two"));
|
||||
|
||||
Ebean.insert(p);
|
||||
Ebean.save(p);
|
||||
|
||||
CKeyAssoc assoc2 = new CKeyAssoc();
|
||||
assoc2.setAssocOne("assocTwo");
|
||||
@@ -46,7 +46,7 @@ public class TestCKeyLazyLoad extends BaseTestCase {
|
||||
p2.add(new CKeyDetail("somethine one"));
|
||||
p2.add(new CKeyDetail("somethine two"));
|
||||
|
||||
Ebean.insert(p2);
|
||||
Ebean.save(p2);
|
||||
|
||||
CKeyParentId searchId = new CKeyParentId(1, "one");
|
||||
|
||||
|
||||
+2
-2
@@ -35,8 +35,8 @@ public class TestOnCascadeDeleteChildrenWithCompositeKeys extends BaseTestCase {
|
||||
Ebean.delete(Ebean.find(User.class).findList());
|
||||
|
||||
// insert 2 User records
|
||||
Ebean.insert(new User(1L));
|
||||
Ebean.insert(new User(2L));
|
||||
Ebean.save(new User(1L));
|
||||
Ebean.save(new User(2L));
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
@@ -3,6 +3,9 @@ package com.avaje.tests.inheritance;
|
||||
import junit.framework.Assert;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.basic.AttributeHolder;
|
||||
import com.avaje.tests.model.basic.ListAttribute;
|
||||
@@ -10,7 +13,7 @@ import com.avaje.tests.model.basic.ListAttributeValue;
|
||||
|
||||
public class TestSkippable extends TestCase {
|
||||
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(TestSkippable.class);
|
||||
|
||||
/**
|
||||
* Test query.
|
||||
@@ -18,8 +21,8 @@ public class TestSkippable extends TestCase {
|
||||
* it was considered safe to skip as it didn't take into account any derived classes
|
||||
* into account with e.g. collections and Cascade options </p>
|
||||
*/
|
||||
public void testQuery()
|
||||
{
|
||||
public void testQuery() {
|
||||
|
||||
// Setup the data first
|
||||
final ListAttributeValue value1 = new ListAttributeValue();
|
||||
final ListAttributeValue value2 = new ListAttributeValue();
|
||||
@@ -30,20 +33,21 @@ public class TestSkippable extends TestCase {
|
||||
final ListAttribute listAttribute = new ListAttribute();
|
||||
listAttribute.add(value1);
|
||||
Ebean.save(listAttribute);
|
||||
|
||||
logger.info(" -- seeded data");
|
||||
|
||||
final ListAttribute listAttributeDB = Ebean.find(ListAttribute.class, listAttribute.getId());
|
||||
Assert.assertNotNull(listAttributeDB);
|
||||
|
||||
final ListAttributeValue value1_DB = listAttributeDB.getValues().iterator().next();
|
||||
|
||||
|
||||
Assert.assertTrue(value1.getId().equals(value1_DB.getId()));
|
||||
logger.info(" -- asserted data in db");
|
||||
|
||||
|
||||
final AttributeHolder holder = new AttributeHolder();
|
||||
holder.add(listAttributeDB);
|
||||
|
||||
Ebean.save(holder);
|
||||
logger.info(" -- saved holder");
|
||||
|
||||
// Now change the M2M listAttribute.values and save the holder
|
||||
// The save should cascade as follows
|
||||
@@ -53,11 +57,11 @@ public class TestSkippable extends TestCase {
|
||||
|
||||
// Save the holder - should cascade down to the listAtribute and save the values
|
||||
Ebean.save(holder);
|
||||
logger.info(" -- M2M detected delete of value1 and add of value2 ?");
|
||||
|
||||
|
||||
final ListAttribute listAttributeDB_2 = Ebean.find(ListAttribute.class, listAttributeDB.getId());
|
||||
Assert.assertNotNull(listAttributeDB_2);
|
||||
|
||||
final ListAttributeValue value2_DB_2 = listAttributeDB_2.getValues().iterator().next();
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,69 @@
|
||||
package com.avaje.tests.insert;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
import com.avaje.ebean.BaseTestCase;
|
||||
import com.avaje.ebean.Ebean;
|
||||
import com.avaje.tests.model.basic.Customer;
|
||||
|
||||
public class TestInsertCollection extends BaseTestCase {
|
||||
|
||||
@Test
|
||||
public void test() {
|
||||
|
||||
Customer cust1 = new Customer();
|
||||
cust1.setName("jim");
|
||||
|
||||
Customer cust2 = new Customer();
|
||||
cust2.setName("bob");
|
||||
|
||||
List<Customer> customers = new ArrayList<Customer>();
|
||||
customers.add(cust1);
|
||||
customers.add(cust2);
|
||||
|
||||
Ebean.insert(customers);
|
||||
|
||||
Assert.assertNotNull(cust1.getId());
|
||||
Assert.assertNotNull(cust2.getId());
|
||||
|
||||
Customer cust1Check = Ebean.find(Customer.class, cust1.getId());
|
||||
Assert.assertEquals(cust1.getName(), cust1Check.getName());
|
||||
Customer cust2Check = Ebean.find(Customer.class, cust2.getId());
|
||||
Assert.assertEquals(cust2.getName(), cust2Check.getName());
|
||||
|
||||
cust1.setName("jim-changed");
|
||||
cust2.setName("bob-changed");
|
||||
|
||||
Ebean.update(customers);
|
||||
|
||||
Customer cust1Check2 = Ebean.find(Customer.class, cust1.getId());
|
||||
Assert.assertEquals("jim-changed", cust1Check2.getName());
|
||||
Customer cust2Check2 = Ebean.find(Customer.class, cust2.getId());
|
||||
Assert.assertEquals("bob-changed", cust2Check2.getName());
|
||||
|
||||
|
||||
cust1Check2.setName("jim-updated");
|
||||
Customer cust3 = new Customer();
|
||||
cust3.setName("mac");
|
||||
|
||||
List<Customer> saveList = new ArrayList<Customer>();
|
||||
saveList.add(cust1Check2);
|
||||
saveList.add(cust3);
|
||||
|
||||
Ebean.save(saveList);
|
||||
|
||||
|
||||
Customer cust1Check3 = Ebean.find(Customer.class, cust1.getId());
|
||||
Assert.assertEquals("jim-updated", cust1Check3.getName());
|
||||
Customer cust3Check = Ebean.find(Customer.class, cust3.getId());
|
||||
Assert.assertEquals("mac", cust3Check.getName());
|
||||
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
@@ -80,12 +80,12 @@ public class ResetBasicData {
|
||||
Country c = new Country();
|
||||
c.setCode("NZ");
|
||||
c.setName("New Zealand");
|
||||
server.insert(c);
|
||||
server.save(c);
|
||||
|
||||
Country au = new Country();
|
||||
au.setCode("AU");
|
||||
au.setName("Australia");
|
||||
server.insert(au);
|
||||
server.save(au);
|
||||
}
|
||||
});
|
||||
}
|
||||
@@ -99,25 +99,25 @@ public class ResetBasicData {
|
||||
p.setId(1);
|
||||
p.setName("Chair");
|
||||
p.setSku("C001");
|
||||
server.insert(p);
|
||||
server.save(p);
|
||||
|
||||
p = new Product();
|
||||
p.setId(2);
|
||||
p.setName("Desk");
|
||||
p.setSku("DSK1");
|
||||
server.insert(p);
|
||||
server.save(p);
|
||||
|
||||
p = new Product();
|
||||
p.setId(3);
|
||||
p.setName("Computer");
|
||||
p.setSku("C002");
|
||||
server.insert(p);
|
||||
server.save(p);
|
||||
|
||||
p = new Product();
|
||||
p.setId(4);
|
||||
p.setName("Printer");
|
||||
p.setSku("C003");
|
||||
server.insert(p);
|
||||
server.save(p);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
@@ -2,6 +2,9 @@ package com.avaje.tests.update;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import org.junit.Assert;
|
||||
import org.junit.Before;
|
||||
@@ -251,4 +254,120 @@ public class TestStatelessUpdate extends BaseTestCase {
|
||||
// maybe check if update instead of insert has been executed,
|
||||
// currently "Unique index or primary key violation" PersistenceException is throwing
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testStatelessRecursiveUpdateWithChangesInDetailOnly() {
|
||||
// arrange
|
||||
Contact contact1 = new Contact();
|
||||
contact1.setLastName("contact1");
|
||||
|
||||
Contact contact2 = new Contact();
|
||||
contact2.setLastName("contact2");
|
||||
|
||||
Customer customer = new Customer();
|
||||
customer.setName("something");
|
||||
customer.getContacts().add(contact1);
|
||||
customer.getContacts().add(contact2);
|
||||
|
||||
server.save(customer);
|
||||
|
||||
|
||||
|
||||
// act
|
||||
Contact updateContact1 = new Contact();
|
||||
updateContact1.setId(contact1.getId());
|
||||
updateContact1.setLastName("contact1-changed");
|
||||
|
||||
|
||||
Contact updateContact3 = new Contact();
|
||||
//updateContact3.setId(contact3.getId());
|
||||
updateContact3.setLastName("contact3-added");
|
||||
|
||||
Customer updateCustomer = new Customer();
|
||||
updateCustomer.setId(customer.getId());
|
||||
updateCustomer.getContacts().add(updateContact1);
|
||||
updateCustomer.getContacts().add(updateContact3);
|
||||
|
||||
// not adding contact2 so it will get deleted
|
||||
//updateCustomer.getContacts().add(updateContact2);
|
||||
|
||||
server.update(updateCustomer);
|
||||
|
||||
|
||||
// assert
|
||||
Customer assCustomer = server.find(Customer.class, customer.getId());
|
||||
List<Contact> assContacts = assCustomer.getContacts();
|
||||
Assert.assertEquals(2, assContacts.size());
|
||||
Set<Integer> ids = new LinkedHashSet<Integer>();
|
||||
Set<String> names = new LinkedHashSet<String>();
|
||||
for (Contact contact : assContacts) {
|
||||
ids.add(contact.getId());
|
||||
names.add(contact.getLastName());
|
||||
}
|
||||
Assert.assertTrue(ids.contains(contact1.getId()));
|
||||
Assert.assertTrue(ids.contains(updateContact3.getId()));
|
||||
Assert.assertFalse(ids.contains(contact2.getId()));
|
||||
|
||||
Assert.assertTrue(names.contains(updateContact1.getLastName()));
|
||||
Assert.assertTrue(names.contains(updateContact3.getLastName()));
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testStatelessRecursiveUpdateWithChangesInDetailOnlyAnd() {
|
||||
// arrange
|
||||
Contact contact1 = new Contact();
|
||||
contact1.setLastName("contact1");
|
||||
|
||||
Contact contact2 = new Contact();
|
||||
contact2.setLastName("contact2");
|
||||
|
||||
Customer customer = new Customer();
|
||||
customer.setName("something");
|
||||
customer.getContacts().add(contact1);
|
||||
customer.getContacts().add(contact2);
|
||||
|
||||
server.save(customer);
|
||||
|
||||
|
||||
// act
|
||||
Contact updateContact1 = new Contact();
|
||||
updateContact1.setId(contact1.getId());
|
||||
updateContact1.setLastName("contact1-changed");
|
||||
|
||||
|
||||
Contact updateContact3 = new Contact();
|
||||
updateContact3.setLastName("contact3-added");
|
||||
|
||||
Customer updateCustomer = new Customer();
|
||||
updateCustomer.setId(customer.getId());
|
||||
updateCustomer.getContacts().add(updateContact1);
|
||||
updateCustomer.getContacts().add(updateContact3);
|
||||
|
||||
// not adding contact2 but it won't be deleted in this case
|
||||
boolean deleteMissingChildren = false;
|
||||
server.update(updateCustomer, null, deleteMissingChildren);
|
||||
|
||||
|
||||
// assert
|
||||
Customer assCustomer = server.find(Customer.class, customer.getId());
|
||||
List<Contact> assContacts = assCustomer.getContacts();
|
||||
|
||||
// contact 2 was not deleted this time
|
||||
Assert.assertEquals(3, assContacts.size());
|
||||
|
||||
Set<Integer> ids = new LinkedHashSet<Integer>();
|
||||
Set<String> names = new LinkedHashSet<String>();
|
||||
for (Contact contact : assContacts) {
|
||||
ids.add(contact.getId());
|
||||
names.add(contact.getLastName());
|
||||
}
|
||||
Assert.assertTrue(ids.contains(contact1.getId()));
|
||||
Assert.assertTrue(ids.contains(updateContact3.getId()));
|
||||
Assert.assertTrue(ids.contains(contact2.getId()));
|
||||
|
||||
Assert.assertTrue(names.contains(updateContact1.getLastName()));
|
||||
Assert.assertTrue(names.contains(contact2.getLastName()));
|
||||
Assert.assertTrue(names.contains(updateContact3.getLastName()));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user