object/src/main/java/com/orientechnologies/orient/object/metadata/schema/OSchemaProxyObject.java
public synchronized void generateSchema(final Class<?> iClass, ODatabaseDocument database) {
    if (iClass == null || iClass.isInterface() || iClass.isPrimitive() || iClass.isEnum() || iClass.isAnonymousClass())
      return;
    OObjectEntitySerializer.registerClass(iClass);
    OClass schema = database.getMetadata().getSchema().getClass(iClass);
    if (schema == null) {
      generateOClass(iClass, database);
    }
    List<String> fields = OObjectEntitySerializer.getClassFields(iClass);
    if (fields != null)
      for (String field : fields) {
        if (schema.existsProperty(field))
          continue;
        if (OObjectEntitySerializer.isVersionField(iClass, field) || OObjectEntitySerializer.isIdField(iClass, field))
          continue;
        Field f = OObjectEntitySerializer.getField(field, iClass);
        if (f.getType().equals(Object.class) || f.getType().equals(ODocument.class) || OBlob.class.isAssignableFrom(f.getType())) {
          continue;
        }
        OType t = OObjectEntitySerializer.getTypeByClass(iClass, field, f);
        if (t == OType.CUSTOM) {
          OEntityManager entityManager = OEntityManager.getEntityManagerByDatabaseURL(database.getURL());
          // if the target type is registered as entity, it should be linked instead of custom/serialized
          if (entityManager.getEntityClass(f.getType().getSimpleName()) != null) {
            t = OType.LINK;
          }
        }
        if (t == null) {
          if (f.getType().isEnum())
            t = OType.STRING;
          else {
            t = OType.LINK;
          }
        }
        switch (t) {

        case LINK:
          Class<?> linkedClazz = OObjectEntitySerializer.getSpecifiedLinkedType(f);
          if (linkedClazz == null)
            linkedClazz = f.getType();
          generateLinkProperty(database, schema, field, t, linkedClazz);
          break;
        case LINKLIST:
        case LINKMAP:
        case LINKSET:
          linkedClazz = OObjectEntitySerializer.getSpecifiedMultiLinkedType(f);
          if (linkedClazz == null)
            linkedClazz = OReflectionHelper.getGenericMultivalueType(f);
          if (linkedClazz != null)
            generateLinkProperty(database, schema, field, t, linkedClazz);
          break;

        case EMBEDDED:
          linkedClazz = f.getType();
          if (linkedClazz == null || linkedClazz.equals(Object.class) || linkedClazz.equals(ODocument.class) || OBlob.class
              .isAssignableFrom(f.getType())) {
            continue;
          } else {
            generateLinkProperty(database, schema, field, t, linkedClazz);
          }
          break;

        case EMBEDDEDLIST:
        case EMBEDDEDSET:
        case EMBEDDEDMAP:
          linkedClazz = OReflectionHelper.getGenericMultivalueType(f);
          if (linkedClazz == null || linkedClazz.equals(Object.class) || linkedClazz.equals(ODocument.class) || OBlob.class
              .isAssignableFrom(f.getType())) {
            continue;
          } else {
            if (OReflectionHelper.isJavaType(linkedClazz)) {
              schema.createProperty(field, t, OType.getTypeByClass(linkedClazz));
            } else if (linkedClazz.isEnum()) {
              schema.createProperty(field, t, OType.STRING);
            } else {
              generateLinkProperty(database, schema, field, t, linkedClazz);
            }
          }
          break;

        default:
          schema.createProperty(field, t);
          break;
        }
      }
  }
public synchronized void generateSchema(final Class<?> iClass, ODatabaseDocument database) {
    if (iClass == null || iClass.isInterface() || iClass.isPrimitive() || iClass.isEnum() || iClass.isAnonymousClass())
      return;
    OObjectEntitySerializer.registerClass(iClass);
    OClass schema = database.getMetadata().getSchema().getClass(iClass);
    if (schema == null) {
      generateOClass(iClass, database);
    }
    List<String> fields = OObjectEntitySerializer.getClassFields(iClass);
    if (fields != null)
      for (String field : fields) {
        if (schema.existsProperty(field))
          continue;
        if (OObjectEntitySerializer.isVersionField(iClass, field) || OObjectEntitySerializer.isIdField(iClass, field))
          continue;
        Field f = OObjectEntitySerializer.getField(field, iClass);
        if (f.getType().equals(Object.class) || f.getType().equals(ODocument.class) || OBlob.class.isAssignableFrom(f.getType())) {
          continue;
        }
        OType t = OObjectEntitySerializer.getTypeByClass(iClass, field, f);
        if (t == OType.CUSTOM) {
          OEntityManager entityManager = OEntityManager.getEntityManagerByDatabaseURL(database.getURL());
          // if the target type is registered as entity, it should be linked instead of custom/serialized
          if (entityManager.getEntityClass(f.getType().getSimpleName()) != null) {
            t = OType.LINK;
          }
        }
        if (t == null) {
          if (f.getType().isEnum())
            t = OType.STRING;
          else {
            t = OType.LINK;
          }
        }
        switch (t) {

        case LINK:
          Class<?> linkedClazz = OObjectEntitySerializer.getSpecifiedLinkedType(f);
          if (linkedClazz == null)
            linkedClazz = f.getType();
          generateLinkProperty(database, schema, field, t, linkedClazz);
          break;
        case LINKLIST:
        case LINKMAP:
        case LINKSET:
          linkedClazz = OObjectEntitySerializer.getSpecifiedMultiLinkedType(f);
          if (linkedClazz == null)
            linkedClazz = OReflectionHelper.getGenericMultivalueType(f);
          if (linkedClazz != null)
            generateLinkProperty(database, schema, field, t, linkedClazz);
          break;

        case EMBEDDED:
          linkedClazz = f.getType();
          if (linkedClazz == null || linkedClazz.equals(Object.class) || linkedClazz.equals(ODocument.class) || OBlob.class
              .isAssignableFrom(f.getType())) {
            continue;
          } else {
            generateLinkProperty(database, schema, field, t, linkedClazz);
          }
          break;

        case EMBEDDEDLIST:
        case EMBEDDEDSET:
        case EMBEDDEDMAP:
          linkedClazz = OReflectionHelper.getGenericMultivalueType(f);
          if (linkedClazz == null || linkedClazz.equals(Object.class) || linkedClazz.equals(ODocument.class) || OBlob.class
              .isAssignableFrom(f.getType())) {
            continue;
          } else {
            if (OReflectionHelper.isJavaType(linkedClazz)) {
              schema.createProperty(field, t, OType.getTypeByClass(linkedClazz));
            } else if (linkedClazz.isEnum()) {
              schema.createProperty(field, t, OType.STRING);
            } else {
              generateLinkProperty(database, schema, field, t, linkedClazz);
            }
          }
          break;

        default:
          schema.createProperty(field, t);
          break;
        }
      }
  }
public synchronized void generateSchema ( final Class < ? > iClass , ODatabaseDocument database ) { if ( iClass == null || iClass . isInterface ( ) || iClass . isPrimitive ( ) || iClass . isEnum ( ) || iClass . isAnonymousClass ( ) ) return ; OObjectEntitySerializer . registerClass ( iClass ) ; OClass schema = database . getMetadata ( ) . getSchema ( ) . getClass ( iClass ) ; if ( schema == null ) { generateOClass ( iClass , database ) ; } List < String > fields = OObjectEntitySerializer . getClassFields ( iClass ) ; if ( fields != null ) for ( String field : fields ) { if ( schema . existsProperty ( field ) ) continue ; if ( OObjectEntitySerializer . isVersionField ( iClass , field ) || OObjectEntitySerializer . isIdField ( iClass , field ) ) continue ; Field f = OObjectEntitySerializer . getField ( field , iClass ) ; if ( f . getType ( ) . equals ( Object . class ) || f . getType ( ) . equals ( ODocument . class ) || OBlob . class . isAssignableFrom ( f . getType ( ) ) ) { continue ; } OType t = OObjectEntitySerializer . getTypeByClass ( iClass , field , f ) ; if ( t == OType . CUSTOM ) { OEntityManager entityManager = OEntityManager . getEntityManagerByDatabaseURL ( database . getURL ( ) ) ; // if the target type is registered as entity, it should be linked instead of custom/serialized if ( entityManager . getEntityClass ( f . getType ( ) . getSimpleName ( ) ) != null ) { t = OType . LINK ; } } if ( t == null ) { if ( f . getType ( ) . isEnum ( ) ) t = OType . STRING ; else { t = OType . LINK ; } } switch ( t ) { case LINK : Class < ? > linkedClazz = OObjectEntitySerializer . getSpecifiedLinkedType ( f ) ; if ( linkedClazz == null ) linkedClazz = f . getType ( ) ; generateLinkProperty ( database , schema , field , t , linkedClazz ) ; break ; case LINKLIST : case LINKMAP : case LINKSET : linkedClazz = OObjectEntitySerializer . getSpecifiedMultiLinkedType ( f ) ; if ( linkedClazz == null ) linkedClazz = OReflectionHelper . getGenericMultivalueType ( f ) ; if ( linkedClazz != null ) generateLinkProperty ( database , schema , field , t , linkedClazz ) ; break ; case EMBEDDED : linkedClazz = f . getType ( ) ; if ( linkedClazz == null || linkedClazz . equals ( Object . class ) || linkedClazz . equals ( ODocument . class ) || OBlob . class . isAssignableFrom ( f . getType ( ) ) ) { continue ; } else { generateLinkProperty ( database , schema , field , t , linkedClazz ) ; } break ; case EMBEDDEDLIST : case EMBEDDEDSET : case EMBEDDEDMAP : linkedClazz = OReflectionHelper . getGenericMultivalueType ( f ) ; if ( linkedClazz == null || linkedClazz . equals ( Object . class ) || linkedClazz . equals ( ODocument . class ) || OBlob . class . isAssignableFrom ( f . getType ( ) ) ) { continue ; } else { if ( OReflectionHelper . isJavaType ( linkedClazz ) ) { schema . createProperty ( field , t , OType . getTypeByClass ( linkedClazz ) ) ; } else if ( linkedClazz . isEnum ( ) ) { schema . createProperty ( field , t , OType . STRING ) ; } else { generateLinkProperty ( database , schema , field , t , linkedClazz ) ; } } break ; default : schema . createProperty ( field , t ) ; break ; } } }
Generate/updates the SchemaClass and properties from given Class<?>.

@param iClass :- the Class<?> to generate
Generate / updates the SchemaClass and properties from given Class<? > .