public void testSaveAll() {
tx.begin();
List<Employee> emps = new ArrayList<Employee>();
List<Employee> expectedEmployees = new ArrayList<Employee>();
for (int i = 0; i < NUMBER_TO_INSERT; ++i) {
Employee e = session.find(Employee.class, i);
if (e != null) {
if (i%2 != 0) {
error("Employee " + i + " should not exist.");
}
// if exists, change age
e.setAge(NUMBER_TO_INSERT - i);
} else {
// if not exist, insert with new age
if (i%2 == 0) {
error("Employee " + i + " should exist.");
} else {
e = employees.get(i);
e.setAge(NUMBER_TO_INSERT - i);
}
}
emps.add(e);
expectedEmployees.add(e);
}
// send the changes to the database
List<Employee> savedEmployees = (List<Employee>)session.savePersistentAll(emps);
if (savedEmployees.size() != NUMBER_TO_INSERT) {
error("Wrong size for saved employees. Expected: " + NUMBER_TO_INSERT
+ " actual: " + savedEmployees.size());
}
for (int i = 0; i < NUMBER_TO_INSERT; ++i) {
Employee e = expectedEmployees.get(i);
// verify saved employees
Employee saved = savedEmployees.get(i);
if (saved != e) {
error ("Failed saveAll: employee " + i + " did not match savedEmployees. "
+ "Expected: " + e.toString() + " hashcode: " + e.hashCode()
+ " actual: " + saved.toString() + " hashcode: " + saved.hashCode());
}
}
tx.commit();
// now verify that the changes were committed
tx.begin();
for (int i = 0; i < NUMBER_TO_INSERT; ++i) {
Employee e = session.find(Employee.class, i);
if (e == null) {
error("Failed saveAll: employee " + i + " does not exist.");
} else {
// verify age
int expected = NUMBER_TO_INSERT - i;
int actual = e.getAge();
if (expected != actual) {
error("Failed saveAll: for employee " + i
+ " expected age " + expected
+ " actual age " + actual);
}