
com.github.alittlehuang.data.query.support.AbstractCriteriaBuilder Maven / Gradle / Ivy
package com.github.alittlehuang.data.query.support;
import com.github.alittlehuang.data.query.specification.*;
import com.github.alittlehuang.data.query.support.model.*;
import javax.persistence.LockModeType;
import javax.persistence.criteria.JoinType;
/**
* @author ALittleHuang
*/
public abstract class AbstractCriteriaBuilder>
extends AbstractWhereClauseBuilder
implements CriteriaBuilder {
private final CriteriaModel criteria;
protected AbstractCriteriaBuilder(Class type) {
super(type);
this.criteria = new CriteriaModel<>(getWhereClause(), type);
}
public AbstractCriteriaBuilder(Expression path, WhereClause root, Criteria criteria) {
super(path, root, criteria.getJavaType());
this.criteria = CriteriaModel.convert(criteria);
}
@Override
public THIS addSelect(String... paths) {
for (String path : paths) {
String[] names = path.split("\\.");
SelectionModel selectionModel = new SelectionModel<>();
selectionModel.setNames(names);
criteria.getSelections().add(selectionModel);
}
return self();
}
@Override
public THIS addSelect(Expressions expression) {
criteria.getSelections().add(new SelectionModel<>(expression, getJavaType()));
return self();
}
@Override
public THIS addSelect(Expressions expression, AggregateFunctions aggregate) {
SelectionModel model = new SelectionModel<>(expression, getJavaType());
model.setAggregateFunctions(aggregate);
criteria.getSelections().add(model);
return self();
}
@Override
public THIS addGroupings(String... paths) {
for (String path : paths) {
ExpressionModel model = new ExpressionModel<>();
model.setNames(path.split("\\."));
criteria.getGroupings().add(model);
}
return self();
}
@Override
public THIS addGroupings(Expressions expression) {
criteria.getGroupings().add(ExpressionModel.convertExpression(expression, getJavaType()));
return self();
}
@Override
public THIS addOrdersAsc(String... paths) {
for (String path : paths) {
OrdersModel order = new OrdersModel<>();
order.setNames(path.split("\\."));
criteria.getOrders().add(order);
}
return self();
}
@Override
public THIS addOrdersAsc(Expressions expression) {
criteria.getOrders().add(new OrdersModel<>(expression, getJavaType()));
return self();
}
@Override
public THIS addOrdersDesc(String... paths) {
for (String path : paths) {
OrdersModel order = new OrdersModel<>();
order.setNames(path.split("\\."));
order.setDirection(Direction.DESC);
criteria.getOrders().add(order);
}
return self();
}
@Override
public THIS addOrdersDesc(Expressions expression) {
OrdersModel order = new OrdersModel<>(expression, getJavaType());
order.setDirection(Direction.DESC);
criteria.getOrders().add(order);
return self();
}
@Override
public THIS fetch(String... paths) {
for (String path : paths) {
fetch(path, JoinType.LEFT);
}
return self();
}
@Override
public THIS fetch(String paths, JoinType joinType) {
FetchAttributeModel fetchAttribute = new FetchAttributeModel<>();
fetchAttribute.setJoinType(joinType);
fetchAttribute.setNames(paths.split("\\."));
criteria.getFetchAttributes().add(fetchAttribute);
return self();
}
@Override
public THIS fetch(Expressions expression, JoinType joinType) {
FetchAttributeModel attributeModel = new FetchAttributeModel<>(expression, getJavaType());
attributeModel.setJoinType(joinType);
criteria.getFetchAttributes().add(attributeModel);
return self();
}
@Override
public THIS fetch(Expressions expression) {
return fetch(expression, JoinType.LEFT);
}
@Override
public THIS setLockModeType(LockModeType lockModeType) {
criteria.setLockModeType(lockModeType);
return self();
}
@Override
public CriteriaModel getCriteria() {
return criteria;
}
@Override
public THIS setOffset(long offset) {
criteria.setOffset(offset);
return self();
}
@Override
public THIS setMaxResult(long maxResult) {
criteria.setMaxResults(maxResult);
return self();
}
@Override
public THIS setPageable(long page, long size) {
criteria.setMaxResults(size);
criteria.setOffset(page * size);
return self();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy