public void reset() throws Throwable { if (((AbstractSession) getSession()).isInTransaction()) { ((AbstractSession) getSession()).rollbackTransaction(); getSession().getIdentityMapAccessor().initializeAllIdentityMaps(); } if (mappingToDisableBatchReadInReset != null) { mappingToDisableBatchReadInReset.setUsesBatchReading(false); mappingToDisableBatchReadInReset.getSelectionQuery().setIsPrepared(false); ((ReadAllQuery) mappingToDisableBatchReadInReset.getSelectionQuery()) .setBatchFetchPolicy(null); mappingToDisableBatchReadInReset .getDescriptor() .getObjectBuilder() .initializeBatchFetchedAttributes(); mappingToDisableBatchReadInReset = null; } }
protected void setup() throws Throwable { if ((batchType == BatchFetchType.IN) && !getSession().getPlatform().isOracle()) { throwWarning("Nested arrays not supported on this database"); } // set readBatch to true on managedEmployees mapping mappingToDisableBatchReadInReset = (ForeignReferenceMapping) getSession() .getDescriptor(Employee.class) .getMappingForAttributeName("managedEmployees"); if (mappingToDisableBatchReadInReset.shouldUseBatchReading()) { // nothing to do - it already uses batch reading mappingToDisableBatchReadInReset = null; } else { mappingToDisableBatchReadInReset.setUsesBatchReading(true); mappingToDisableBatchReadInReset.setBatchFetchType(batchType); mappingToDisableBatchReadInReset.getSelectionQuery().setIsPrepared(false); ((ReadAllQuery) mappingToDisableBatchReadInReset.getSelectionQuery()) .setBatchFetchPolicy(null); mappingToDisableBatchReadInReset .getDescriptor() .getObjectBuilder() .initializeBatchFetchedAttributes(); } // create objects to be used by the test: // emp_1 has two managed employees, each of them has one managed employee. emp_1 = new Employee(); emp_1.firstName = firstName; emp_1.lastName = "1"; emp_1.sex = "male"; emp_1.managedEmployees = new Vector(2); Employee emp_1_1 = new Employee(); emp_1_1.firstName = firstName; emp_1_1.lastName = "1_1"; emp_1_1.sex = "male"; emp_1_1.managedEmployees = new Vector(1); emp_1.managedEmployees.add(emp_1_1); emp_1_1.manager = emp_1; Employee emp_1_2 = new Employee(); emp_1_2.firstName = firstName; emp_1_2.lastName = "1_2"; emp_1_2.sex = "male"; emp_1_2.managedEmployees = new Vector(1); emp_1.managedEmployees.add(emp_1_2); emp_1_2.manager = emp_1; Employee emp_1_1_1 = new Employee(); emp_1_1_1.firstName = firstName; emp_1_1_1.lastName = "1_1_1"; emp_1_1_1.sex = "male"; emp_1_1.managedEmployees.add(emp_1_1_1); emp_1_1_1.manager = emp_1_1; Employee emp_1_2_1 = new Employee(); emp_1_2_1.firstName = firstName; emp_1_2_1.lastName = "1_2_1"; emp_1_2_1.sex = "male"; emp_1_2.managedEmployees.add(emp_1_2_1); emp_1_2_1.manager = emp_1_2; // Begin transaction here and rollback it in reset. ((AbstractSession) getSession()).beginTransaction(); // write the objects into the db, merge them into session's cache. UnitOfWork uow = getSession().acquireUnitOfWork(); uow.registerObject(emp_1); uow.commit(); // now invalidate all the created objects in the session's cache getSession().getIdentityMapAccessor().invalidateObject(emp_1); getSession().getIdentityMapAccessor().invalidateObject(emp_1_1); getSession().getIdentityMapAccessor().invalidateObject(emp_1_2); getSession().getIdentityMapAccessor().invalidateObject(emp_1_1_1); getSession().getIdentityMapAccessor().invalidateObject(emp_1_2_1); }