org.hibernate.query.sqm.tree.domain.SqmCorrelatedSingularJoin Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core-jakarta Show documentation
Show all versions of hibernate-core-jakarta Show documentation
Hibernate O/RM implementation of the Jakarta Persistence specification
The newest version!
/*
* Hibernate, Relational Persistence for Idiomatic Java
*
* License: GNU Lesser General Public License (LGPL), version 2.1 or later
* See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
*/
package org.hibernate.query.sqm.tree.domain;
import org.hibernate.metamodel.model.domain.SingularPersistentAttribute;
import org.hibernate.query.hql.spi.SqmCreationProcessingState;
import org.hibernate.query.hql.spi.SqmPathRegistry;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.tree.SqmJoinType;
import org.hibernate.query.sqm.tree.from.SqmFrom;
import org.hibernate.query.sqm.tree.from.SqmRoot;
/**
* @author Christian Beikov
*/
public class SqmCorrelatedSingularJoin extends SqmSingularJoin implements SqmCorrelation {
private final SqmCorrelatedRootJoin correlatedRootJoin;
private final SqmSingularJoin correlationParent;
public SqmCorrelatedSingularJoin(SqmSingularJoin correlationParent) {
super(
correlationParent.getLhs(),
correlationParent.getAttribute(),
null,
SqmJoinType.INNER,
false,
correlationParent.nodeBuilder()
);
this.correlatedRootJoin = SqmCorrelatedRootJoin.create( correlationParent, this );
this.correlationParent = correlationParent;
}
private SqmCorrelatedSingularJoin(
SqmFrom lhs,
SingularPersistentAttribute joinedNavigable,
String alias,
SqmJoinType joinType,
boolean fetched,
NodeBuilder nodeBuilder,
SqmCorrelatedRootJoin correlatedRootJoin,
SqmSingularJoin correlationParent) {
super( lhs, joinedNavigable, alias, joinType, fetched, nodeBuilder );
this.correlatedRootJoin = correlatedRootJoin;
this.correlationParent = correlationParent;
}
@Override
public SqmSingularJoin getCorrelationParent() {
return correlationParent;
}
@Override
public SqmPath getWrappedPath() {
return correlationParent;
}
@Override
public boolean isCorrelated() {
return true;
}
@Override
public SqmRoot getCorrelatedRoot() {
return correlatedRootJoin;
}
@Override
public SqmCorrelatedSingularJoin makeCopy(SqmCreationProcessingState creationProcessingState) {
final SqmPathRegistry pathRegistry = creationProcessingState.getPathRegistry();
//noinspection unchecked
return new SqmCorrelatedSingularJoin<>(
pathRegistry.findFromByPath( getLhs().getNavigablePath() ),
getReferencedPathSource(),
getExplicitAlias(),
getSqmJoinType(),
isFetched(),
nodeBuilder(),
(SqmCorrelatedRootJoin) pathRegistry.findFromByPath( correlatedRootJoin.getNavigablePath() ),
(SqmSingularJoin) pathRegistry.findFromByPath( correlationParent.getNavigablePath() )
);
}
}