public Object getObjectForUpdate(
     Session session,
     Object objectToUpdateBeforeChange,
     Object objectToUpdateAfterChange,
     boolean useUOW) {
   ClassDescriptor desc = session.getClassDescriptor(objectToUpdateBeforeChange);
   Record rowBeforeChange =
       desc.getObjectBuilder()
           .buildRow(objectToUpdateBeforeChange, (AbstractSession) session, WriteType.UPDATE);
   Record rowAfterChange =
       desc.getObjectBuilder()
           .buildRow(objectToUpdateAfterChange, (AbstractSession) session, WriteType.UPDATE);
   Record rowChange = new DatabaseRecord();
   getChange(
       rowChange,
       session,
       objectToUpdateBeforeChange,
       objectToUpdateAfterChange,
       desc,
       useUOW,
       WriteType.UPDATE);
   Record rowReturn = getRowForUpdate(rowChange);
   if (rowReturn != null && !rowReturn.isEmpty()) {
     Record row = new DatabaseRecord(rowAfterChange.size());
     row.putAll(rowAfterChange);
     row.putAll(rowReturn);
     return readObjectFromRow(session, desc, row);
   } else {
     return objectToUpdateAfterChange;
   }
 }
 protected static void afterAddDescriptors(Session session, TestSystem aTestSystem) {
   if (aTestSystem instanceof InheritanceSystem) {
     // For using read all subclasses views.
     org.eclipse.persistence.internal.databaseaccess.DatabasePlatform platform =
         session.getLogin().getPlatform();
     if (platform.isOracle() || platform.isSybase() || platform.isSQLAnywhere()) {
       ClassDescriptor computerDescriptor = session.getClassDescriptor(Computer.class);
       ClassDescriptor vehicleDescriptor = session.getClassDescriptor(Vehicle.class);
       if (computerDescriptor.getInheritancePolicy().requiresMultipleTableSubclassRead()) {
         computerDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllComputers");
       }
       if (vehicleDescriptor.getInheritancePolicy().requiresMultipleTableSubclassRead()) {
         vehicleDescriptor.getInheritancePolicy().setReadAllSubclassesViewName("AllVehicles");
       }
     }
   }
 }
 public Object getObjectForInsert(Session session, Object objectToInsert) {
   ClassDescriptor desc = session.getClassDescriptor(objectToInsert);
   Record rowToInsert =
       desc.getObjectBuilder()
           .buildRow(objectToInsert, (AbstractSession) session, WriteType.INSERT);
   Record rowReturn = getRowForInsert(rowToInsert);
   if (rowReturn != null && !rowReturn.isEmpty()) {
     Record row = new DatabaseRecord(rowToInsert.size());
     row.putAll(rowToInsert);
     row.putAll(rowReturn);
     return readObjectFromRow(session, desc, row);
   } else {
     return objectToInsert;
   }
 }
 protected Object readObjectFromRow(Session session, ClassDescriptor desc, Record row) {
   if (desc.hasInheritance()) {
     Class newClass =
         desc.getInheritancePolicy().classFromRow((DatabaseRecord) row, (AbstractSession) session);
     desc = session.getClassDescriptor(newClass);
   }
   Object object = desc.getObjectBuilder().buildNewInstance();
   ReadObjectQuery query = new ReadObjectQuery();
   query.setSession((AbstractSession) session);
   for (Enumeration mappings = desc.getMappings().elements(); mappings.hasMoreElements(); ) {
     DatabaseMapping mapping = (DatabaseMapping) mappings.nextElement();
     mapping.readFromRowIntoObject(
         (DatabaseRecord) row,
         query.getJoinedAttributeManager(),
         object,
         null,
         query,
         query.getSession(),
         true);
   }
   return object;
 }