docs: private ObjectType getObjectType() throws InstantiationException, IllegalAccessException, ClassNotFoundException {
  
          int foundIndexForEntitySqlDao = -1;
          // If the sqlDaoClass implements multiple interfaces, first figure out which one is the EntitySqlDao
          for (int i = 0; i < sqlDaoClass.getGenericInterfaces().length; i++) {
              final Type type = sqlDaoClass.getGenericInterfaces()[0];
              if (!(type instanceof java.lang.reflect.ParameterizedType)) {
                  // AuditSqlDao for example won't extend EntitySqlDao
                  return null;
              }
  
              if (EntitySqlDao.class.getName().equals(((Class) ((java.lang.reflect.ParameterizedType) type).getRawType()).getName())) {
                  foundIndexForEntitySqlDao = i;
                  break;
              }
          }
          // Find out from the parameters of the EntitySqlDao which one is the EntityModelDao, and extract his (sub)type to finally return the ObjectType
          if (foundIndexForEntitySqlDao >= 0) {
              final Type[] types = ((java.lang.reflect.ParameterizedType) sqlDaoClass.getGenericInterfaces()[foundIndexForEntitySqlDao]).getActualTypeArguments();
              int foundIndexForEntityModelDao = -1;
              for (int i = 0; i < types.length; i++) {
                  final Class clz = ((Class) types[i]);
                  final Type[] genericInterfaces = clz.getGenericInterfaces();
                  for (final Type genericInterface : genericInterfaces) {
                      if (genericInterface instanceof ParameterizedType) {
                          if (EntityModelDao.class.getName().equals(((Class) ((ParameterizedType) genericInterface).getRawType()).getName())) {
                              foundIndexForEntityModelDao = i;
                              break;
                          }
                      }
                  }
              }
  
              if (foundIndexForEntityModelDao >= 0) {
                  final String modelClassName = ((Class) types[foundIndexForEntityModelDao]).getName();
  
                  final Class<? extends EntityModelDao<?>> clz = (Class<? extends EntityModelDao<?>>) Class.forName(modelClassName);
  
                  final EntityModelDao<?> modelDao = (EntityModelDao<?>) clz.newInstance();
                  return modelDao.getTableName().getObjectType();
              }
          }
          return null;
      }