/*
* 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.produce.spi;
import javax.persistence.criteria.CriteriaDelete;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.CriteriaUpdate;
import org.hibernate.engine.spi.SessionFactoryImplementor;
import org.hibernate.query.sqm.tree.SqmDeleteStatement;
import org.hibernate.query.sqm.tree.SqmSelectStatement;
import org.hibernate.query.sqm.tree.SqmStatement;
import org.hibernate.query.sqm.tree.SqmUpdateStatement;
/**
* Main entry point into building semantic queries.
*
* @see SessionFactoryImplementor#getSemanticQueryProducer
*
* @author Steve Ebersole
*/
public interface SemanticQueryProducer {
/**
* Performs the interpretation of a HQL/JPQL query string to SQM.
*
* @param query The HQL/JPQL query string to interpret
*
* @return The semantic representation of the incoming query.
*/
SqmStatement interpret(String query);
/**
* Perform the interpretation of a (select) criteria query.
*
* @param query The criteria query
*
* @return The semantic representation of the incoming criteria query.
*/
SqmSelectStatement interpret(CriteriaQuery query);
/**
* Perform the interpretation of a (delete) criteria query.
*
* @param criteria The DELETE criteria
*
* @return The semantic representation of the incoming criteria query.
*/
SqmDeleteStatement interpret(CriteriaDelete criteria);
/**
* Perform the interpretation of a (update) criteria query.
*
* @param criteria The criteria query
*
* @return The semantic representation of the incoming criteria query.
*/
SqmUpdateStatement interpret(CriteriaUpdate criteria);
}