docs: protected boolean isTransient(ClassDescriptor cld, Object obj, Identity oid)
      {
          // if the Identity is transient we assume a non-persistent object
          boolean isNew = oid != null && oid.isTransient();
          /*
          detection of new objects is costly (select of ID in DB to check if object
          already exists) we do:
          a. check if the object has nullified PK field
          b. check if the object is already registered
          c. lookup from cache and if not found, last option select on DB
          */
          if(!isNew)
          {
              final PersistenceBroker pb = getBroker();
              if(cld == null)
              {
                  cld = pb.getClassDescriptor(obj.getClass());
              }
              isNew = pb.serviceBrokerHelper().hasNullPKField(cld, obj);
              if(!isNew)
              {
                  if(oid == null)
                  {
                      oid = pb.serviceIdentity().buildIdentity(cld, obj);
                  }
                  final ObjectEnvelope mod = objectEnvelopeTable.getByIdentity(oid);
                  if(mod != null)
                  {
                      // already registered object, use current state
                      isNew = mod.needsInsert();
                  }
                  else
                  {
                      // if object was found cache, assume it's old
                      // else make costly check against the DB
                      isNew = pb.serviceObjectCache().lookup(oid) == null
                              && !pb.serviceBrokerHelper().doesExist(cld, oid, obj);
                  }
              }
          }
          return isNew;
      }