package com.mysema.query.hql;
import java.util.Collection;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.mysema.query.grammar.HqlGrammar;
import com.mysema.query.grammar.HqlOps;
import com.mysema.query.grammar.HqlQueryBase;
import com.mysema.query.grammar.types.Expr;
/**
* AbstractHqlQuery provides the same features as HqlQuery, but acts as a super class
* for domain specific query subclasses
*
* @author tiwe
* @version $Id$
*/
public class AbstractHqlQuery> extends HqlQueryBase {
private static final Logger logger = LoggerFactory.getLogger(HqlQuery.class);
private static final HqlOps OPS_DEFAULT = new HqlOps();
private final Session session;
public AbstractHqlQuery(Session session) {
this(session, OPS_DEFAULT);
}
public AbstractHqlQuery(Session session, HqlOps ops) {
super(ops);
this.session = session;
}
private Query createQuery(String queryString, Integer limit, Integer offset) {
Query query = session.createQuery(queryString);
setConstants(query, getConstants());
if (limit != null) query.setMaxResults(limit);
if (offset != null) query.setFirstResult(offset);
return query;
}
public static void setConstants(Query query, List> constants){
for (int i=0; i < constants.size(); i++){
String key = "a"+(i+1);
Object val = constants.get(i);
if (val instanceof Collection>){
// NOTE : parameter types should be given explicitly
query.setParameterList(key,(Collection>)val);
}else if (val.getClass().isArray()){
// NOTE : parameter types should be given explicitly
query.setParameterList(key,(Object[])val);
}else{
// NOTE : parameter types should be given explicitly
query.setParameter(key,val);
}
}
}
@SuppressWarnings("unchecked")
public