private String resolveProperties(String aliasName, String propertyName) { Map fieldResults = context.getPropertyResultsMapByAlias(aliasName); SQLLoadable persister = context.getEntityPersisterByAlias(aliasName); String suffix = context.getEntitySuffixByAlias(aliasName); if ("*".equals(propertyName)) { if (!fieldResults.isEmpty()) { throw new QueryException("Using return-propertys together with * syntax is not supported."); } aliasesFound++; return persister.selectFragment(aliasName, suffix); } else { String[] columnAliases; // Let return-propertys override whatever the persister has for aliases. columnAliases = (String[]) fieldResults.get(propertyName); if (columnAliases == null) { columnAliases = persister.getSubclassPropertyColumnAliases(propertyName, suffix); } if (columnAliases == null || columnAliases.length == 0) { throw new QueryException( "No column name found for property [" + propertyName + "] for alias [" + aliasName + "]", originalQueryString); } if (columnAliases.length != 1) { // TODO: better error message since we actually support composites if names are explicitly // listed. throw new QueryException( "SQL queries only support properties mapped to a single column - property [" + propertyName + "] is mapped to " + columnAliases.length + " columns.", originalQueryString); } aliasesFound++; return columnAliases[0]; } }