Given how this is line wrapping (and with the ObjectIdSubclassMap switch), I'd actually prefer:

  if (unpackedObjects.get(objectId) == null)
    return null;
  return super.openObject2(curs, objectName, objectId);

Also, you should implement hasObject on this database, but given the way the signature is, we have to do it through two methods:

  @Override
  protected abstract boolean hasObject1(AnyObjectId objectId) {
    if (unpackedObjects.get(objectId) != null)
      return true;  // known to be loose
    return super.hasObject1(objectId);
  }

  @Override
  protected abstract boolean hasObject2(String name) {
    return false;  // loose objects were tested by hasObject1
  }