io.ebeaninternal.server.loadcontext.DLoadBaseContext Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of ebean Show documentation
Show all versions of ebean Show documentation
composite of common runtime dependencies for all platforms
package io.ebeaninternal.server.loadcontext;
import io.ebean.FetchConfig;
import io.ebean.bean.ObjectGraphNode;
import io.ebean.bean.PersistenceContext;
import io.ebeaninternal.api.SpiQuery;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import io.ebeaninternal.server.querydefn.OrmQueryProperties;
/**
* Base class for Bean and BeanCollection loading (lazy loading and query join loading).
*/
abstract class DLoadBaseContext {
protected final DLoadContext parent;
protected final BeanDescriptor> desc;
protected final String fullPath;
protected final String serverName;
final OrmQueryProperties queryProps;
final boolean hitCache;
final int firstBatchSize;
final int secondaryBatchSize;
final ObjectGraphNode objectGraphNode;
final boolean queryFetch;
DLoadBaseContext(DLoadContext parent, BeanDescriptor> desc, String path, int defaultBatchSize, OrmQueryProperties queryProps) {
this.parent = parent;
this.serverName = parent.getEbeanServer().getName();
this.desc = desc;
this.queryProps = queryProps;
this.fullPath = parent.getFullPath(path);
this.hitCache = parent.isBeanCacheGet() && desc.isBeanCaching();
this.objectGraphNode = parent.getObjectGraphNode(path);
this.queryFetch = queryProps != null && queryProps.isQueryFetch();
this.firstBatchSize = initFirstBatchSize(defaultBatchSize, queryProps);
this.secondaryBatchSize = initSecondaryBatchSize(defaultBatchSize, firstBatchSize, queryProps);
}
private int initFirstBatchSize(int batchSize, OrmQueryProperties queryProps) {
if (queryProps == null) {
return batchSize;
}
int queryBatchSize = queryProps.getQueryFetchBatch();
if (queryBatchSize == -1) {
return batchSize;
} else if (queryBatchSize == 0) {
return 100;
} else {
return queryBatchSize;
}
}
private int initSecondaryBatchSize(int defaultBatchSize, int firstBatchSize, OrmQueryProperties queryProps) {
if (queryProps == null) {
return defaultBatchSize;
}
FetchConfig fetchConfig = queryProps.getFetchConfig();
if (fetchConfig.isQueryAll()) {
return firstBatchSize;
}
int lazyBatchSize = fetchConfig.getLazyBatchSize();
return (lazyBatchSize > 1) ? lazyBatchSize : defaultBatchSize;
}
/**
* If the parent has a query plan label then extend it with the path and
* set onto the secondary query.
*/
void setLabel(SpiQuery> query) {
String label = parent.getPlanLabel();
if (label != null) {
query.setProfilePath(label, fullPath, parent.getProfileLocation());
}
}
PersistenceContext getPersistenceContext() {
return parent.getPersistenceContext();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy