@Override
    public Map<Path<?>, Object> createMap(RelationalPath<?> entity, Object bean) {
        try {
            Map<Path<?>, Object> values = new LinkedHashMap<>();
            Class<?> beanClass = bean.getClass();
            Map<String, Path<?>> columns = getColumns(entity);
            // populate in column order
            for (Map.Entry<String, Path<?>> entry : columns.entrySet()) {
                Path<?> path = entry.getValue();
                Field beanField = ReflectionUtils.getFieldOrNull(beanClass, entry.getKey());
                if (beanField != null && !Modifier.isStatic(beanField.getModifiers())) {
                    beanField.setAccessible(true);
                    Object propertyValue = beanField.get(bean);
                    if (propertyValue != null) {
                        values.put(path, propertyValue);
                    } else if (withNullBindings && !isPrimaryKeyColumn(entity, path)) {
                        values.put(path, Null.DEFAULT);
                    }
                }
            }
            return values;
        } catch (IllegalAccessException e) {
            throw new QueryException(e);
        }
    }
Creates the mapping by inspecting the RelationalPath and Object via reflection.
Given bean doesn't need to have @Column metadata, but the fields need to have the same
name as in the given relational path.

@author tiwe
querydsl-sql/src/main/java/com/querydsl/sql/dml/DefaultMapper.java