if (ammd.getEmbeddedMetaData() != null) {
// we need to add all the embedded fields
storeEmbeddedFields(ammd, value);
return;
}
ColumnImpl column = table.getColumnFor(objectProvider.getClassMetaData(), ammd);
if (column == null || column.getField() == null || !column.getField().isCreateable()) return;
Object actualValue = value;
String actualFieldName = column.getFieldName();
try {
switch (column.getType()) {
case datetime:
if (value instanceof Date) {
ColumnMetaData[] cmds = ammd.getColumnMetaData();
Calendar cal = Calendar.getInstance();
cal.setTime((Date) value);
if (cmds != null && cmds.length > 0 && "TIME".equals(cmds[0].getJdbcType())) {
actualValue = new Time(cal);
} else {
actualValue = cal;
}
} else if (value instanceof Time) {
actualValue = value;
}
break;
case currency:
actualValue = value.toString();
break;
case reference:
AbstractClassMetaData acmd =
storeManager.getMetaDataManager().getMetaDataForClass(ammd.getType(),
objectProvider.getExecutionContext().getClassLoaderResolver());
if (acmd != null) {
actualValue = PersistenceUtils.getMemberValue(acmd, acmd.getPKMemberPositions()[0], value);
if (actualValue == null) {
ObjectManager om = ((ObjectProviderImpl) objectProvider).getStateManager().getObjectManager();
if (((ForceObjectManagerImpl) om).isInAllOrNothingMode()) {
/**
* This is instance of AllOrNothing transaction
* Since the parent object has not been saved to the db yet
* we do not have an id yet so we link objects by extId
*/
SObject parentRef = new SObject();
TableImpl parent = storeManager.getTable(acmd);
if (parent.getExternalIdColumn() == null) {
throw new NucleusUserException("EntityManager in persistence.xml has 'force.AllOrNothing'"
+ " set to true. In this mode all top parent Entities must"
+ " have an externalId field. Offending entity: "
+ parent.getTableName().getName());
}
parentRef.setType(parent.getTableName().getForceApiName());
SObject parentSObject = ((ForceObjectManagerImpl) om).getParentSObject(value);
parentRef.setField(parent.getExternalIdColumn().getFieldName(),
parentSObject.getField(parent.getExternalIdColumn().getFieldName()));
actualValue = parentRef;
actualFieldName = column.getForceApiRelationshipName();
} else {
throw new NucleusUserException("Child entity cannot be saved before parent entity.");
}
}
} else {