public void serializeForInsert(QueryMetadata md, Collection<Path<?>> columns, List<Object> values, SubQueryExpression<?> query, Map<Path<?>, Expression<?>> inserts) {
        append(INSERT);
        final JoinExpression root = md.getJoins().get(0);
        append(getEntityName(root.getTarget().getType()));
        append(" (");
        boolean first = true;
        for (Path<?> path : columns) {
            if (!first) {
                append(", ");
            }

            append(relativePathString(root.getTarget(), path));
            first = false;
        }
        append(")\n");

        if (values != null && values.size() > 0) {
            append(VALUES);
            append(" (");
            first = true;
            for (Object value : values) {
                if (!first) {
                    append(", ");
                }
                handle(value);
                first = false;
            }
            append(")");
        } else if (inserts != null && inserts.entrySet().size() > 0) {
            first = true;
            for (Map.Entry<Path<?>, Expression<?>> entry : inserts.entrySet()) {
                if (!first) {
                    append(", ");
                }
                handle(entry.getKey());
                append(" = ");
                handle(entry.getValue());
                first = false;
            }
        } else {
            serialize(query.getMetadata(), false, null);
        }
    }
{@code JPQLSerializer} serializes Querydsl expressions into JPQL syntax.

@author tiwe
querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java