Using setDelegateProjections(true), the instruction said "Custom Wrapper can deal with projected fields." What does it mean?
Projected fields (which columns should be displayed in a SQL SELECT statement) can only be specified in a derived view, not in a base view. While a derived view is just a selection from a base view which is always in the format of SELECT * from ... When the Custom Wrapper executes a derived view query with selected/projected fields, it is still the base view query gets executed first (SELECT * ) , retrieving all fields. So what does it mean for "Custom Wrapper can deal with projected fields"? The Wrapper seems to always retrieve all fields, and there is no way to pass limited "projectedFields" to the method run(CustomWrapperConditionHolder condition, List<CustomWrapperFieldExpression> projectedFields, CustomWrapperResult result, Map<String, String> inputValues)