コード例 #1
0
  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;
    }
  }
コード例 #2
0
  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);
  }