*/
protected void addCreate(UnitOfWork uow, Instance instance)
{
Metaclass metaclass = instance.getMetaclass();
int nCount = metaclass.getInstanceAttributeCount();
VirtualMapping mapping = (VirtualMapping)instance.getPersistenceMapping();
OID oid = instance.getOID();
VirtualWork work = getWork(uow, VirtualWork.CREATE, instance);
if (oid == null)
{
Component keyGen = mapping.getKeyGenerator();
if (keyGen != null)
{
oid = ((OIDGenerator)keyGen.getInstance(uow.getInvocationContext())).generateOID(instance, this);
}
else
{
// Compute OID from attribute values
Object[] valueArray = null;
for (int i = 0; i < nCount; i++)
{
Attribute attribute = metaclass.getInstanceAttribute(i);
if (attribute.getType().isPrimitive())
{
VirtualPrimitiveMapping attrMapping = (VirtualPrimitiveMapping)mapping.getAttributeMapping(attribute);
if (attrMapping != null) // ignore non-persisted attributes
{
int nKeyPart = attrMapping.getObjectKeyPart();
if (nKeyPart >= 0)
{
Object value = instance.getValueDirect(i);
if (value == null)
{
valueArray = null;
break;
}
if (valueArray == null)
{
valueArray = new Object[mapping.getObjectKey().getPartCount()];
}
valueArray[nKeyPart] = value;
}
}