public static <T> EntityBuilder<T> similarTo(T entity, Property<?>... differences) {
        Class<T> entityType = (Class<T>) entity.getClass();

        Collection<Property<?>> differentProperties = new TreeSet<>(asList(differences));
        try {
            for (Field field : entityType.getDeclaredFields()) {
                if (!differentProperties.contains(new Property<>(field.getName()))) {
                    field.setAccessible(true);
                    differentProperties.add(new Property<>(field.getName(), field.get(entity)));
                }
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }

        return new EntityBuilder<>(entityType, differentProperties);
    }