HHH-13450 Do not compute the full role name of a collection unless necessary
This commit is contained in:
parent
e13386769c
commit
7309cdeb66
|
@ -313,7 +313,7 @@ public final class TwoPhaseLoad {
|
||||||
String associationName,
|
String associationName,
|
||||||
Type type) {
|
Type type) {
|
||||||
if ( type.isAssociationType() || type.isCollectionType() ) {
|
if ( type.isAssociationType() || type.isCollectionType() ) {
|
||||||
Boolean overridingEager = isEagerFetchProfile( session, entityName + "." + associationName );
|
Boolean overridingEager = isEagerFetchProfile( session, entityName, associationName );
|
||||||
|
|
||||||
if ( LOG.isDebugEnabled() ) {
|
if ( LOG.isDebugEnabled() ) {
|
||||||
if ( overridingEager != null ) {
|
if ( overridingEager != null ) {
|
||||||
|
@ -331,14 +331,19 @@ public final class TwoPhaseLoad {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private static Boolean isEagerFetchProfile(SharedSessionContractImplementor session, String role) {
|
private static Boolean isEagerFetchProfile(SharedSessionContractImplementor session, String entityName, String associationName) {
|
||||||
LoadQueryInfluencers loadQueryInfluencers = session.getLoadQueryInfluencers();
|
LoadQueryInfluencers loadQueryInfluencers = session.getLoadQueryInfluencers();
|
||||||
|
|
||||||
for ( String fetchProfileName : loadQueryInfluencers.getEnabledFetchProfileNames() ) {
|
// Performance: avoid concatenating entityName + "." + associationName when there is no need,
|
||||||
FetchProfile fp = session.getFactory().getFetchProfile( fetchProfileName );
|
// as otherwise this section becomes an hot allocation point.
|
||||||
Fetch fetch = fp.getFetchByRole( role );
|
if ( loadQueryInfluencers.hasEnabledFetchProfiles() ) {
|
||||||
if ( fetch != null && Fetch.Style.JOIN == fetch.getStyle() ) {
|
final String role = entityName + '.' + associationName;
|
||||||
return true;
|
for ( String fetchProfileName : loadQueryInfluencers.getEnabledFetchProfileNames() ) {
|
||||||
|
FetchProfile fp = session.getFactory().getFetchProfile( fetchProfileName );
|
||||||
|
Fetch fetch = fp.getFetchByRole( role );
|
||||||
|
if ( fetch != null && Fetch.Style.JOIN == fetch.getStyle() ) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -151,7 +151,7 @@ public abstract class AbstractEntityJoinWalker extends JoinWalker {
|
||||||
String relativePropertyPath = pos >= 0
|
String relativePropertyPath = pos >= 0
|
||||||
? fullPath.substring( pos )
|
? fullPath.substring( pos )
|
||||||
: rootPropertyName;
|
: rootPropertyName;
|
||||||
String fetchRole = persister.getEntityName() + "." + relativePropertyPath;
|
String fetchRole = persister.getEntityName() + '.' + relativePropertyPath;
|
||||||
|
|
||||||
for ( String profileName : getLoadQueryInfluencers().getEnabledFetchProfileNames() ) {
|
for ( String profileName : getLoadQueryInfluencers().getEnabledFetchProfileNames() ) {
|
||||||
final FetchProfile profile = getFactory().getFetchProfile( profileName );
|
final FetchProfile profile = getFactory().getFetchProfile( profileName );
|
||||||
|
|
|
@ -58,7 +58,7 @@ public final class FetchStrategyHelper {
|
||||||
final String relativePropertyPath = pos >= 0
|
final String relativePropertyPath = pos >= 0
|
||||||
? fullPath.substring( pos )
|
? fullPath.substring( pos )
|
||||||
: rootPropertyName;
|
: rootPropertyName;
|
||||||
final String fetchRole = persister.getEntityName() + "." + relativePropertyPath;
|
final String fetchRole = persister.getEntityName() + '.' + relativePropertyPath;
|
||||||
|
|
||||||
for ( String profileName : loadQueryInfluencers.getEnabledFetchProfileNames() ) {
|
for ( String profileName : loadQueryInfluencers.getEnabledFetchProfileNames() ) {
|
||||||
final FetchProfile profile = loadQueryInfluencers.getSessionFactory().getFetchProfile( profileName );
|
final FetchProfile profile = loadQueryInfluencers.getSessionFactory().getFetchProfile( profileName );
|
||||||
|
|
Loading…
Reference in New Issue