private FromElement createFromElement(EntityPersister entityPersister) { Joinable joinable = (Joinable) entityPersister; String text = joinable.getTableName(); AST ast = createFromElement( text ); FromElement element = (FromElement) ast; return element; }
@Override public String getTableName() { return ( (Joinable) getElementPersister() ).getTableName(); }
private Map<String, String> mergeAliasMaps(SessionFactoryImplementor factory) { Map<String, String> ret = new HashMap<String, String>(); if ( aliasTableMap != null ) { ret.putAll( aliasTableMap ); } if ( aliasEntityMap != null ) { for ( Map.Entry<String, String> entry : aliasEntityMap.entrySet() ) { ret.put( entry.getKey(), Joinable.class.cast( factory.getEntityPersister( entry.getValue() ) ).getTableName() ); } } return ret; } }
public void addManyToManyJoin(JoinFragment outerjoin, QueryableCollection collection) throws MappingException { String manyToManyFilter = collection.getManyToManyFilterFragment( rhsAlias, enabledFilters ); String condition = "".equals( manyToManyFilter ) ? on : "".equals( on ) ? manyToManyFilter : on + " and " + manyToManyFilter; outerjoin.addJoin( joinable.getTableName(), rhsAlias, lhsColumns, rhsColumns, joinType, condition ); outerjoin.addJoins( joinable.fromJoinFragment( rhsAlias, false, true ), joinable.whereJoinFragment( rhsAlias, false, true ) ); } }
public void addJoins(JoinFragment outerjoin) throws MappingException { outerjoin.addJoin( joinable.getTableName(), rhsAlias, lhsColumns, rhsColumns, joinType, on ); outerjoin.addJoins( joinable.fromJoinFragment( rhsAlias, false, true ), joinable.whereJoinFragment( rhsAlias, false, true ) ); }
/** * Used to detect circularities in the joined graph, note that * this method is side-effecty */ protected boolean isDuplicateAssociation( final String lhsTable, final String[] lhsColumnNames, final AssociationType type) { final String foreignKeyTable; final String[] foreignKeyColumns; if ( type.getForeignKeyDirection() == ForeignKeyDirection.FROM_PARENT ) { foreignKeyTable = lhsTable; foreignKeyColumns = lhsColumnNames; } else { foreignKeyTable = type.getAssociatedJoinable( getFactory() ).getTableName(); foreignKeyColumns = JoinHelper.getRHSColumnNames( type, getFactory() ); } return isDuplicateAssociation( foreignKeyTable, foreignKeyColumns ); }
@Override public void startingEntity(EntityDefinition entityDefinition) { // see if the EntityDefinition is a root... final boolean isRoot = fetchSourceStack.isEmpty(); if ( ! isRoot ) { // if not, this call should represent a fetch which should have been handled in #startingAttribute return; } // if we get here, it is a root log.tracef( "%s Starting root entity : %s", StringHelper.repeat( ">>", fetchSourceStack.size() ), entityDefinition.getEntityPersister().getEntityName() ); if ( !supportsRootEntityReturns() ) { throw new HibernateException( "This strategy does not support root entity returns" ); } final EntityReturnImpl entityReturn = new EntityReturnImpl( entityDefinition, querySpaces ); addRootReturn( entityReturn ); pushToStack( entityReturn ); // also add an AssociationKey for the root so we can later on recognize circular references back to the root. final Joinable entityPersister = (Joinable) entityDefinition.getEntityPersister(); associationKeyRegistered( new AssociationKey( entityPersister.getTableName(), entityPersister.getKeyColumnNames() ) ); }
@Override public void startingCollection(CollectionDefinition collectionDefinition) { // see if the EntityDefinition is a root... final boolean isRoot = fetchSourceStack.isEmpty(); if ( ! isRoot ) { // if not, this call should represent a fetch which should have been handled in #startingAttribute return; } log.tracef( "%s Starting root collection : %s", StringHelper.repeat( ">>", fetchSourceStack.size() ), collectionDefinition.getCollectionPersister().getRole() ); // if we get here, it is a root if ( ! supportsRootCollectionReturns() ) { throw new HibernateException( "This strategy does not support root collection returns" ); } final CollectionReturn collectionReturn = new CollectionReturnImpl( collectionDefinition, querySpaces ); pushToCollectionStack( collectionReturn ); addRootReturn( collectionReturn ); associationKeyRegistered( new AssociationKey( ( (Joinable) collectionDefinition.getCollectionPersister() ).getTableName(), ( (Joinable) collectionDefinition.getCollectionPersister() ).getKeyColumnNames() ) ); }
joinable.getTableName(), rhsTableAlias, polyJoinColumns, joinable.getTableName(), rhsTableAlias, joinColumns,
@Override public void foundCircularAssociation(AssociationAttributeDefinition attributeDefinition) { final FetchStrategy fetchStrategy = determineFetchStrategy( attributeDefinition ); final AssociationKey associationKey = attributeDefinition.getAssociationKey(); // go ahead and build the bidirectional fetch if ( attributeDefinition.getAssociationNature() == AssociationAttributeDefinition.AssociationNature.ENTITY ) { final Joinable currentEntityPersister = (Joinable) currentSource().resolveEntityReference().getEntityPersister(); final AssociationKey currentEntityReferenceAssociationKey = new AssociationKey( currentEntityPersister.getTableName(), currentEntityPersister.getKeyColumnNames() ); // if associationKey is equal to currentEntityReferenceAssociationKey // that means that the current EntityPersister has a single primary key attribute // (i.e., derived attribute) which is mapped by attributeDefinition. // This is not a bidirectional association. // TODO: AFAICT, to avoid an overflow, the associated entity must already be loaded into the session, or // it must be loaded when the ID for the dependent entity is resolved. Is there some other way to // deal with this??? final FetchSource registeredFetchSource = registeredFetchSource( associationKey ); if ( registeredFetchSource != null && ! associationKey.equals( currentEntityReferenceAssociationKey ) ) { currentSource().buildBidirectionalEntityReference( attributeDefinition, fetchStrategy, registeredFetchSource( associationKey ).resolveEntityReference() ); } } else { // Do nothing for collection } }
Joinable last; if ( rootJoinable != null ) { joinFragment.addCrossJoin( rootJoinable.getTableName(), rootAlias ); final String filterCondition = rootJoinable.filterFragment( rootAlias, enabledFilters, treatAsDeclarations ); joinFragment.addFromFragmentString( first.joinable.getTableName() ); joinFragment.addFromFragmentString( " " ); joinFragment.addFromFragmentString( first.getAlias() ); join.getJoinable().getTableName(), join.getAlias(), join.getLHSColumns(), join.getJoinable().getTableName(), join.getAlias(), join.getLHSColumns(),
initialize( walker ); final String tableName = ( (Joinable) entityPersister ).getTableName(); final String tableAlias = fromClause.getAliasGenerator().createName( entityPersister.getEntityName() );
join.initialize( HqlSqlTokenTypes.JOIN_FRAGMENT, ( (Joinable) indexEntityPersister ).getTableName() ); join.initialize( collectionFromElement.getWalker() );
return new AssociationKey( joinable.getTableName(), getRHSColumnNames( type, sessionFactory() ) );
private FromElement createFromElement(EntityPersister entityPersister) { Joinable joinable = ( Joinable ) entityPersister; String text = joinable.getTableName(); AST ast = createFromElement( text ); FromElement element = ( FromElement ) ast; return element; }
private FromElement createFromElement(EntityPersister entityPersister) { Joinable joinable = ( Joinable ) entityPersister; String text = joinable.getTableName(); AST ast = createFromElement( text ); FromElement element = ( FromElement ) ast; return element; }
private FromElement createFromElement(EntityPersister entityPersister) { Joinable joinable = ( Joinable ) entityPersister; String text = joinable.getTableName(); AST ast = createFromElement( text ); FromElement element = ( FromElement ) ast; return element; }
private FromElement createFromElement(EntityPersister entityPersister) { Joinable joinable = ( Joinable ) entityPersister; String text = joinable.getTableName(); AST ast = createFromElement( text ); FromElement element = ( FromElement ) ast; return element; }
/** * Checks whether table name and key column names of the given joinable and inverse collection persister match. */ private static boolean isCollectionMatching(Joinable mainSideJoinable, OgmCollectionPersister inverseSidePersister) { boolean isSameTable = mainSideJoinable.getTableName().equals( inverseSidePersister.getTableName() ); if ( !isSameTable ) { return false; } return Arrays.equals( mainSideJoinable.getKeyColumnNames(), inverseSidePersister.getElementColumnNames() ); }
public static String getTableName(Class hqlType, Session session) { SessionFactory factory = session.getSessionFactory(); MetamodelImpl model = (MetamodelImpl) factory.getMetamodel(); EntityPersister ep = model.entityPersister(hqlType); if (ep instanceof Joinable) { Joinable joinable = (Joinable) ep; return joinable.getTableName(); } throw new SystemException("Couldn't get table name for class " + hqlType.getName()); }