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; }