All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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.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.Query;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Root;
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 peek(Consumer> peeker) {
        return (DeleteStream)super.peek(peeker);
    }

    @Override
    public DeleteStream filter(SingularAttribute attribute) {
        return (DeleteStream)super.filter(attribute);
    }

    @Override
    public DeleteStream filter(Function, ? 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 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