org.dellroad.querystream.jpa.DeleteStreamImpl Maven / Gradle / Ivy
/*
* Copyright (C) 2018 Archie L. Cobbs. All rights reserved.
*/
package org.dellroad.querystream.jpa;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import javax.persistence.EntityManager;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.Parameter;
import javax.persistence.Query;
import javax.persistence.TemporalType;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Root;
import javax.persistence.criteria.Selection;
import javax.persistence.metamodel.SingularAttribute;
import org.dellroad.querystream.jpa.querytype.DeleteType;
/**
* Builder for JPA criteria bulk delete queries using a {@link java.util.stream.Stream}-like API.
*/
class DeleteStreamImpl
extends QueryStreamImpl, CriteriaDelete, CriteriaDelete, Query, DeleteType>
implements DeleteStream {
DeleteStreamImpl(EntityManager entityManager, Class type) {
this(entityManager, new DeleteType(type));
}
// Separate constructor to avoid bogus error ("cannot reference queryType before supertype constructor has been called")
private DeleteStreamImpl(EntityManager entityManager, DeleteType queryType) {
this(entityManager, queryType, (builder, query) -> query.from(queryType.getType()), new QueryInfo());
}
private DeleteStreamImpl(EntityManager entityManager, DeleteType queryType,
QueryConfigurer, X, ? extends Root> configurer, QueryInfo queryInfo) {
super(entityManager, queryType, configurer, queryInfo);
}
// DeleteStream
@Override
public int delete() {
return this.toQuery().executeUpdate();
}
// Subclass required methods
@Override
DeleteStream create(EntityManager entityManager, DeleteType queryType,
QueryConfigurer, X, ? extends Root> configurer, QueryInfo queryInfo) {
return new DeleteStreamImpl<>(entityManager, queryType, configurer, queryInfo);
}
@Override
CriteriaDelete select(CriteriaDelete query, Root selection) {
return query;
}
// Narrowing overrides (QueryStreamImpl)
@Override
public DeleteType getQueryType() {
return this.queryType;
}
@Override
public DeleteStream bind(Ref> ref) {
return (DeleteStream)super.bind(ref);
}
@Override
public > DeleteStream bind(
Ref ref, Function super Root, ? extends S2> refFunction) {
return (DeleteStream)super.bind(ref, refFunction);
}
@Override
public DeleteStream peek(Consumer super Root> peeker) {
return (DeleteStream)super.peek(peeker);
}
@Override
public DeleteStream filter(SingularAttribute super X, Boolean> attribute) {
return (DeleteStream)super.filter(attribute);
}
@Override
public DeleteStream filter(Function super Root, ? extends Expression> predicateBuilder) {
return (DeleteStream)super.filter(predicateBuilder);
}
@Override
public DeleteStream limit(int limit) {
return (DeleteStream)super.limit(limit);
}
@Override
public DeleteStream skip(int skip) {
return (DeleteStream)super.skip(skip);
}
@Override
public DeleteStream withFlushMode(FlushModeType flushMode) {
return (DeleteStream)super.withFlushMode(flushMode);
}
@Override
public DeleteStream withLockMode(LockModeType lockMode) {
return (DeleteStream)super.withLockMode(lockMode);
}
@Override
public DeleteStream withHint(String name, Object value) {
return (DeleteStream)super.withHint(name, value);
}
@Override
public DeleteStream withHints(Map hints) {
return (DeleteStream)super.withHints(hints);
}
@Override
public DeleteStream withParam(Parameter parameter, T value) {
return (DeleteStream)super.withParam(parameter, value);
}
@Override
public DeleteStream withParam(Parameter parameter, Date value, TemporalType temporalType) {
return (DeleteStream)super.withParam(parameter, value, temporalType);
}
@Override
public DeleteStream withParam(Parameter parameter, Calendar value, TemporalType temporalType) {
return (DeleteStream)super.withParam(parameter, value, temporalType);
}
@Override
public DeleteStream withParams(Iterable extends ParamBinding>> params) {
return (DeleteStream)super.withParams(params);
}
@Override
public DeleteStream withLoadGraph(String name) {
return (DeleteStream)super.withLoadGraph(name);
}
@Override
public DeleteStream withFetchGraph(String name) {
return (DeleteStream)super.withFetchGraph(name);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy