public static OrmInfo getOrmInfo(Class<?> clasz) { OrmInfo orm = new OrmInfo(); Table t = clasz.getAnnotation(Table.class); if (t != null) { orm.table = t.name(); } List<ColumnField> columnFields = new ArrayList<ColumnField>(); List<HasManyField> hasManyFields = new ArrayList<HasManyField>(); List<HasOneField> hasOneFields = new ArrayList<HasOneField>(); List<BelongsToField> belongsToFields = new ArrayList<BelongsToField>(); for (Field f : clasz.getDeclaredFields()) { Id id = f.getAnnotation(Id.class); if (id != null) { orm.id = f.getName(); orm.idGeneratorType = id.generate(); orm.idType = f.getType(); } Column column = f.getAnnotation(Column.class); if (column != null) { ColumnField field = new ColumnField(); field.setName(f.getName()); field.setType(f.getType()); columnFields.add(field); } HasMany hasMany = f.getAnnotation(HasMany.class); if (hasMany != null) { HasManyField field = new HasManyField(); field.setName(f.getName()); field.setAnnotation(hasMany); ParameterizedType ptype = (ParameterizedType) f.getGenericType(); Class<?> childClass = (Class<?>) ptype.getActualTypeArguments()[0]; if (hasMany.foreignKey().equals("")) { field.setForeignKey(orm.table + "_id"); } else { field.setForeignKey(hasMany.foreignKey()); } field.setTargetType(childClass); hasManyFields.add(field); } HasOne hasOne = f.getAnnotation(HasOne.class); if (hasOne != null) { HasOneField field = new HasOneField(); field.setName(f.getName()); field.setAnnotation(hasOne); field.setTargetType(f.getType()); if (hasOne.foreignKey().equals("")) { field.setForeignKey(orm.table + "_id"); } else { field.setForeignKey(hasOne.foreignKey()); } hasOneFields.add(field); } BelongsTo belongsTo = f.getAnnotation(BelongsTo.class); if (belongsTo != null) { BelongsToField field = new BelongsToField(); field.setName(f.getName()); field.setAnnotation(belongsTo); field.setTargetType(f.getType()); if (belongsTo.foreignKey().equals("")) { OrmInfo targetOrm = OrmInfo.getOrmInfo(f.getType()); field.setForeignKey(targetOrm.table + "_id"); } else { field.setForeignKey(belongsTo.foreignKey()); } belongsToFields.add(field); } } orm.columnFields = columnFields.toArray(new ColumnField[columnFields.size()]); orm.hasManyFields = hasManyFields.toArray(new HasManyField[hasManyFields.size()]); orm.hasOneFields = hasOneFields.toArray(new HasOneField[hasOneFields.size()]); orm.belongsToFields = belongsToFields.toArray(new BelongsToField[belongsToFields.size()]); return orm; }