mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
97 lines
2.6 KiB
Java
97 lines
2.6 KiB
Java
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();
|
|
}
|
|
|
|
}
|