code: protected void init(Class<T> cls, Key ... keys) {
      	
  		// get the columns 
          List<String> targetColumns = new ArrayList<String>();
          Class<?> clazz = cls;
          while( clazz != null && !clazz.equals(Object.class) ) {
              Field[] fields = clazz.getDeclaredFields();
              
              for( Field f : fields ) {
                  int m = f.getModifiers();
              
                  if( Modifier.isTransient(m) || Modifier.isStatic(m) ) {
                      continue;
                  }
                  if (f.getType().getName().equals(Collection.class.getName())) {
                  	continue; // this is handled by dependency manager
                  }
                  if( !f.getType().getName().equals(Translator.class.getName()) ) {
                  	targetColumns.add(f.getName());    
                  	types.put(f.getName(), f.getType());
                  }
              }
              clazz = clazz.getSuperclass();
          }
          
          columns = new String[targetColumns.size()];
          
          for (int i = 0; i < targetColumns.size(); i++) {
          	columns[i] = targetColumns.get(i);
          }        
      }
docs: Constructs a new persistent factory for objects of the specified class with
  the named unique identifier attributes.
  @param cls the class of objects managed by this factory
  @param keys a list of unique identifiers for instances of the specified class