package org.sqlproc.engine.hibernate;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import org.hibernate.HibernateException;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.jdbc.Work;
import org.hibernate.type.Type;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.sqlproc.engine.SqlControl;
import org.sqlproc.engine.SqlFeature;
import org.sqlproc.engine.SqlProcessorException;
import org.sqlproc.engine.SqlQuery;
import org.sqlproc.engine.SqlRuntimeContext;
import org.sqlproc.engine.impl.SqlUtils;
import org.sqlproc.engine.type.IdentitySetter;
/**
* The Hibernate stack implementation of the SQL Engine query contract. In fact it's an adapter the internal Hibernate
* stuff.
*
*
* For more info please see the Tutorials.
*
* @author Vladimir Hudec
*/
public class HibernateQuery implements SqlQuery {
/**
* The internal slf4j logger.
*/
final Logger logger = LoggerFactory.getLogger(getClass());
/**
* The Hibernate Session instance.
*/
Session session;
/**
* The Hibernate SQLQuery instance.
*/
SQLQuery query;
/**
* The collection of all (auto-generated) identities.
*/
List identities = new ArrayList();
/**
* The collection of all identities setters.
*/
Map identitySetters = new HashMap();
/**
* The collection of all identities types.
*/
Map identityTypes = new HashMap();
/**
* The failed SQL command should be logged.
*/
boolean logError;
/**
* Creates a new instance of this adapter.
*
* @param session
* the Hibernate Session instance
* @param query
* the Hibernate SQLQuery instance
*/
public HibernateQuery(Session session, SQLQuery query) {
this.session = session;
this.query = query;
}
/**
* {@inheritDoc}
*/
@Override
public Object getQuery() {
return query;
}
/**
* {@inheritDoc}
*/
@Override
public SqlQuery setSqlControl(SqlControl sqlControl) {
if (sqlControl != null) {
if (sqlControl.getMaxTimeout() != null)
query.setTimeout(sqlControl.getMaxTimeout());
if (sqlControl.getFirstResult() != null)
query.setFirstResult(sqlControl.getFirstResult());
if (sqlControl.getMaxResults() != null)
query.setMaxResults(sqlControl.getMaxResults());
if (sqlControl.getFetchSize() != null)
query.setFetchSize(sqlControl.getFetchSize());
}
return this;
}
/**
* {@inheritDoc}
*/
@Override
public SqlQuery setOrdered(boolean ordered) {
return this;
}
/**
* {@inheritDoc}
*/
@Override
public List