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

org.hibernate.query.sqm.tree.delete.SqmDeleteStatement Maven / Gradle / Ivy

There is a newer version: 7.0.0.Beta1
Show newest version
/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * License: GNU Lesser General Public License (LGPL), version 2.1 or later
 * See the lgpl.txt file in the root directory or http://www.gnu.org/licenses/lgpl-2.1.html
 */
package org.hibernate.query.sqm.tree.delete;

import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;
import javax.persistence.metamodel.EntityType;

import org.hibernate.metamodel.model.domain.EntityDomainType;
import org.hibernate.query.criteria.JpaCriteriaDelete;
import org.hibernate.query.criteria.JpaPredicate;
import org.hibernate.query.sqm.NodeBuilder;
import org.hibernate.query.sqm.SemanticQueryWalker;
import org.hibernate.query.sqm.SqmQuerySource;
import org.hibernate.query.sqm.tree.AbstractSqmDmlStatement;
import org.hibernate.query.sqm.tree.SqmDeleteOrUpdateStatement;
import org.hibernate.query.sqm.tree.cte.SqmCteConsumer;
import org.hibernate.query.sqm.tree.from.SqmRoot;
import org.hibernate.query.sqm.tree.predicate.SqmPredicate;
import org.hibernate.query.sqm.tree.predicate.SqmWhereClause;

/**
 * @author Steve Ebersole
 */
public class SqmDeleteStatement
		extends AbstractSqmDmlStatement
		implements SqmDeleteOrUpdateStatement, SqmCteConsumer, JpaCriteriaDelete {
	private final SqmQuerySource querySource;

	private SqmWhereClause whereClause;

	public SqmDeleteStatement(SqmRoot target, SqmQuerySource querySource, NodeBuilder nodeBuilder) {
		super( target, querySource, nodeBuilder );
		this.querySource = SqmQuerySource.HQL;

	}

	public SqmDeleteStatement(Class targetEntity, SqmQuerySource querySource, NodeBuilder nodeBuilder) {
		super(
				new SqmRoot<>(
						nodeBuilder.getDomainModel().entity( targetEntity ),
						null,
						nodeBuilder
				),
				querySource,
				nodeBuilder
		);
		this.querySource = SqmQuerySource.CRITERIA;
	}

	@Override
	public SqmQuerySource getQuerySource() {
		return querySource;
	}

	@Override
	public SqmWhereClause getWhereClause() {
		return whereClause;
	}

	@Override
	public void applyPredicate(SqmPredicate predicate) {
		if ( predicate == null ) {
			return;
		}
		if ( whereClause == null ) {
			whereClause = new SqmWhereClause( nodeBuilder() );
		}

		whereClause.applyPredicate( predicate );
	}

	public void setWhereClause(SqmWhereClause whereClause) {
		this.whereClause = whereClause;
	}

	@Override
	public Root from(Class entityClass) {
		final EntityDomainType entity = nodeBuilder().getDomainModel().entity( entityClass );
		SqmRoot root = new SqmRoot<>( entity, null, nodeBuilder() );
		setTarget( root );
		return root;
	}

	@Override
	public Root from(EntityType entity) {
		SqmRoot root = new SqmRoot<>( (EntityDomainType) entity, null, nodeBuilder() );
		setTarget( root );
		return root;
	}

	@Override
	public Root getRoot() {
		return getTarget();
	}

	@Override
	public SqmDeleteStatement where(Expression restriction) {
		getWhereClause().setPredicate( (SqmPredicate) restriction );
		return this;
	}

	@Override
	public SqmDeleteStatement where(Predicate... restrictions) {
		getWhereClause().setPredicate( null );
		for ( Predicate restriction : restrictions ) {
			getWhereClause().applyPredicate( (SqmPredicate) restriction );
		}
		return this;
	}

	@Override
	public JpaPredicate getRestriction() {
		return whereClause == null ? null : whereClause.getPredicate();
	}

	@Override
	public  X accept(SemanticQueryWalker walker) {
		return walker.visitDeleteStatement( this );
	}
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy