blob: 5601993e5a28909714c86aa94ed600c7453f5006 [file] [log] [blame]
/*
* Copyright (c) 2011, 2021 Oracle and/or its affiliates. All rights reserved.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* http://www.eclipse.org/legal/epl-2.0,
* or the Eclipse Distribution License v. 1.0 which is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* SPDX-License-Identifier: EPL-2.0 OR BSD-3-Clause
*/
// Contributors:
// 10/26/2012-2.5 Chris Delahunt
// - 350469: JPA 2.1 Criteria Query framework Bulk Update/Delete support
package org.eclipse.persistence.internal.jpa.querydef;
import jakarta.persistence.criteria.CriteriaDelete;
import jakarta.persistence.criteria.Expression;
import jakarta.persistence.criteria.Predicate;
import jakarta.persistence.criteria.Root;
import jakarta.persistence.metamodel.EntityType;
import jakarta.persistence.metamodel.Metamodel;
import org.eclipse.persistence.expressions.ExpressionBuilder;
import org.eclipse.persistence.queries.DatabaseQuery;
/**
* <p>
* <b>Purpose</b>: Contains the implementation of the CriteriaDelete interface of
* the JPA criteria API.
* <p>
* <b>Description</b>: This is the container class for the components that
* define a Delete Query.
*
* @see jakarta.persistence.criteria CriteriaDelete
*
* @author Chris Delahunt
* @since EclipseLink 2.5
*/
public class CriteriaDeleteImpl<T> extends CommonAbstractCriteriaImpl<T> implements CriteriaDelete<T> {
private static final long serialVersionUID = -3858349449764066901L;
protected Root<T> root;
public CriteriaDeleteImpl(Metamodel metamodel, CriteriaBuilderImpl queryBuilder, Class<T> resultType){
super(metamodel, queryBuilder, resultType);
}
@Override
public Root<T> from(Class<T> entityClass) {
return this.internalFrom(entityClass);
}
@Override
public Root<T> from(EntityType<T> entity) {
return this.internalFrom(entity);
}
@Override
public Root<T> getRoot() {
if (this.root == null) {
if (getResultType() !=null) {
return this.from(getResultType());
}
}
return this.root;
}
@Override
public CriteriaDelete<T> where(Expression<Boolean> restriction) {
return (CriteriaDelete<T>)super.where(restriction);
}
@Override
public CriteriaDelete<T> where(Predicate... restrictions) {
return (CriteriaDelete<T>)super.where(restrictions);
}
@Override
protected void integrateRoot(RootImpl root) {
if (this.root !=root) {
this.root =root;
}
}
@Override
protected org.eclipse.persistence.expressions.Expression getBaseExpression() {
if (this.root == null) {
return new ExpressionBuilder();
} else {
return ((RootImpl)this.root).getCurrentNode();
}
}
@Override
protected DatabaseQuery getDatabaseQuery() {
org.eclipse.persistence.queries.DeleteAllQuery query = new org.eclipse.persistence.queries.DeleteAllQuery(this.queryType, getBaseExpression());
query.setShouldDeferExecutionInUOW(false);
return query;
}
}