private SQLLoadable getSQLLoadable(String entityName) throws MappingException { EntityPersister persister = factory.getEntityPersister( entityName ); if ( !(persister instanceof SQLLoadable) ) { throw new MappingException( "class persister is not SQLLoadable: " + entityName ); } return (SQLLoadable) persister; }
private void processRootReturn(NativeSQLQueryRootReturn rootReturn) { if ( alias2Persister.containsKey( rootReturn.getAlias() ) ) { // already been processed... return; } SQLLoadable persister = getSQLLoadable( rootReturn.getReturnEntityName() ); addPersister( rootReturn.getAlias(), rootReturn.getPropertyResultsMap(), persister ); }
private void addPersister(String alias, Map propertyResult, SQLLoadable persister) { alias2Persister.put( alias, persister ); String suffix = generateEntitySuffix(); LOG.tracev( "Mapping alias [{0}] to entity-suffix [{1}]", alias, suffix ); alias2Suffix.put( alias, suffix ); entityPropertyResultMaps.put( alias, propertyResult ); }
private void addCollection(String role, String alias, Map propertyResults) { SQLLoadableCollection collectionPersister = ( SQLLoadableCollection ) factory.getCollectionPersister( role ); alias2CollectionPersister.put( alias, collectionPersister ); String suffix = generateCollectionSuffix(); LOG.tracev( "Mapping alias [{0}] to collection-suffix [{1}]", alias, suffix ); alias2CollectionSuffix.put( alias, suffix ); collectionPropertyResultMaps.put( alias, propertyResults ); if ( collectionPersister.isOneToMany() || collectionPersister.isManyToMany() ) { SQLLoadable persister = ( SQLLoadable ) collectionPersister.getElementPersister(); addPersister( alias, filter( propertyResults ), persister ); } }
private void processJoinReturn(NativeSQLQueryJoinReturn fetchReturn) { String alias = fetchReturn.getAlias(); // if ( alias2Persister.containsKey( alias ) || collectionAliases.contains( alias ) ) { if ( alias2Persister.containsKey( alias ) || alias2CollectionPersister.containsKey( alias ) ) { // already been processed... return; } String ownerAlias = fetchReturn.getOwnerAlias(); // Make sure the owner alias is known... if ( !alias2Return.containsKey( ownerAlias ) ) { throw new HibernateException( "Owner alias [" + ownerAlias + "] is unknown for alias [" + alias + "]" ); } // If this return's alias has not been processed yet, do so b4 further processing of this return if ( !alias2Persister.containsKey( ownerAlias ) ) { NativeSQLQueryNonScalarReturn ownerReturn = ( NativeSQLQueryNonScalarReturn ) alias2Return.get(ownerAlias); processReturn( ownerReturn ); } SQLLoadable ownerPersister = ( SQLLoadable ) alias2Persister.get( ownerAlias ); Type returnType = ownerPersister.getPropertyType( fetchReturn.getOwnerProperty() ); if ( returnType.isCollectionType() ) { String role = ownerPersister.getEntityName() + '.' + fetchReturn.getOwnerProperty(); addCollection( role, alias, fetchReturn.getPropertyResultsMap() ); // collectionOwnerAliases.add( ownerAlias ); } else if ( returnType.isEntityType() ) { EntityType eType = ( EntityType ) returnType; String returnEntityName = eType.getAssociatedEntityName(); SQLLoadable persister = getSQLLoadable( returnEntityName ); addPersister( alias, fetchReturn.getPropertyResultsMap(), persister ); } }
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 + "]", originalQuery ); } 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.", originalQuery ); } aliasesFound++; return columnAliases[0]; } }
/** * @param propertyResult * @param persister */ private void addPersister(String alias, Map propertyResult, SQLLoadable persister) { alias2Persister.put( alias, persister ); String suffix = generateEntitySuffix(); log.trace( "mapping alias [" + alias + "] to entity-suffix [" + suffix + "]" ); alias2Suffix.put( alias, suffix ); entityPropertyResultMaps.put( alias, propertyResult ); }
private void addCollection(String role, String alias, Map propertyResults) { SQLLoadableCollection collectionPersister = ( SQLLoadableCollection ) factory.getCollectionPersister( role ); alias2CollectionPersister.put( alias, collectionPersister ); String suffix = generateCollectionSuffix(); log.trace( "mapping alias [" + alias + "] to collection-suffix [" + suffix + "]" ); alias2CollectionSuffix.put( alias, suffix ); collectionPropertyResultMaps.put( alias, propertyResults ); if ( collectionPersister.isOneToMany() ) { SQLLoadable persister = ( SQLLoadable ) collectionPersister.getElementPersister(); addPersister( alias, filter( propertyResults ), persister ); } }
public SQLLoadable getEntityPersisterByAlias(String alias) { return aliasContext.getEntityPersister( alias ); }
public SQLLoadable getEntityPersister(String alias) { return (SQLLoadable) alias2Persister.get( alias ); }
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]; } }
@Override public SQLLoadable getEntityPersisterByAlias(String alias) { return null; }
public SQLLoadable getEntityPersister(String alias) { return ( SQLLoadable ) alias2Persister.get( alias ); }
SQLLoadable getEntityPersisterByAlias(String alias);