org.hibernate.loader.plan.build.internal.spaces.JoinImpl Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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 .
*/
package org.hibernate.loader.plan.build.internal.spaces;
import org.hibernate.internal.util.StringHelper;
import org.hibernate.loader.plan.spi.JoinDefinedByMetadata;
import org.hibernate.loader.plan.spi.QuerySpace;
import org.hibernate.type.Type;
/**
* @author Steve Ebersole
*/
public class JoinImpl implements JoinDefinedByMetadata {
private final QuerySpace leftHandSide;
private final QuerySpace rightHandSide;
private final String lhsPropertyName;
private final String[] rhsColumnNames;
private final boolean rightHandSideRequired;
private final Type joinedPropertyType;
public JoinImpl(
QuerySpace leftHandSide,
String lhsPropertyName,
QuerySpace rightHandSide,
String[] rhsColumnNames,
Type joinedPropertyType,
boolean rightHandSideRequired) {
this.leftHandSide = leftHandSide;
this.lhsPropertyName = lhsPropertyName;
this.rightHandSide = rightHandSide;
this.rhsColumnNames = rhsColumnNames;
this.rightHandSideRequired = rightHandSideRequired;
this.joinedPropertyType = joinedPropertyType;
if ( StringHelper.isEmpty( lhsPropertyName ) ) {
throw new IllegalArgumentException( "Incoming 'lhsPropertyName' parameter was empty" );
}
}
@Override
public QuerySpace getLeftHandSide() {
return leftHandSide;
}
@Override
public QuerySpace getRightHandSide() {
return rightHandSide;
}
@Override
public boolean isRightHandSideRequired() {
return rightHandSideRequired;
}
@Override
public String[] resolveAliasedLeftHandSideJoinConditionColumns(String leftHandSideTableAlias) {
return getLeftHandSide().toAliasedColumns( leftHandSideTableAlias, getJoinedPropertyName() );
}
@Override
public String[] resolveNonAliasedRightHandSideJoinConditionColumns() {
// for composite joins (joins whose rhs is a composite) we'd have no columns here.
// processing of joins tries to root out all composite joins, so the expectation
// is that this method would never be called on them
if ( rhsColumnNames == null ) {
throw new IllegalStateException(
"rhsColumnNames were null. Generally that indicates a composite join, in which case calls to " +
"resolveAliasedLeftHandSideJoinConditionColumns are not allowed"
);
}
return rhsColumnNames;
}
@Override
public String getAnyAdditionalJoinConditions(String rhsTableAlias) {
return null;
}
@Override
public String getJoinedPropertyName() {
return lhsPropertyName;
}
@Override
public Type getJoinedPropertyType() {
return joinedPropertyType;
}
}