
paa.coder.noodleCriteriaBuilder.queryBuilder.UpdateQuery Maven / Gradle / Ivy
package paa.coder.noodleCriteriaBuilder.queryBuilder;
import org.hibernate.query.Query;
import paa.coder.noodleCriteriaBuilder.NoodleFactory;
import paa.coder.noodleCriteriaBuilder.interfaces.NoodlePredicate;
import paa.coder.noodleCriteriaBuilder.queryBuilder.expressions.SetterBuilder;
import paa.coder.noodleCriteriaBuilder.queryBuilder.specifications.NoodleSpecificationBuilder;
import javax.persistence.criteria.*;
import java.util.function.Function;
public class UpdateQuery extends NoodleAbstractQuery {
protected final Class from;
private final SetterBuilder setterBuilder;
public UpdateQuery(Class from, NoodleFactory noodleFactory){
super(noodleFactory);
this.from = from;
this.setterBuilder = new SetterBuilder(noodleFactory);
}
@Override
public UpdateQuery where(Function fPred){
super.where(fPred);
return this;
}
private void set(Path p, Expression> expression, CriteriaUpdate update){
update.set(p, expression.as(p.getJavaType()));
}
public UpdateQuery set(Function uFunc){
uFunc.apply(setterBuilder);
return this;
}
public Query query(){
CriteriaUpdate update = noodleFactory.getSession().getCriteriaBuilder().createCriteriaUpdate(from);
Root root = update.from(from);
setterBuilder
.getMapExpressions()
.forEach((k, v) -> k
.apply(pathFinder(root), update, noodleFactory.getSession().getCriteriaBuilder())
.ifPresent(field -> v
.apply(field)
.apply(pathFinder(root), update, noodleFactory.getSession().getCriteriaBuilder())
.ifPresent(exp -> set(field, exp, update))));
getWherePredicates(root, update, noodleFactory.getSession().getCriteriaBuilder()).ifPresent(update::where);
return noodleFactory.getSession().createQuery(update);
}
public Integer updateForce(){
return query().executeUpdate();
}
public Integer update(){
find(from).forEach(i->noodleFactory.getSession().detach(i));
return updateForce();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy