org.hibernate.query.sqm.tree.delete.SqmDeleteStatement Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of hibernate-core Show documentation
Show all versions of hibernate-core Show documentation
Hibernate's core ORM functionality
/*
* 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 );
}
}