/* * Copyright 2014-2015 the original author or authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.rockagen.gnext.qo; import java.util.Arrays; import java.util.Map; import org.hibernate.criterion.DetachedCriteria; import org.hibernate.criterion.Restrictions; /** * Query Object * <p> * Usage: * <p> * <blockquote><pre> * // example 1: * QueryObject q = new QueryObject(); * q.setSql("from User where id< ?"); * q.setArgs(new Object[] { new Long(100) }); * q.setIndex(0); * q.setSize(20); * <p> * // example 2: * QueryObject q = new QueryObject(); * q.setSql("from User where id<:id"); * Map<String, Object> map = new HashMap<String, Object>(); * map.put("id", 10L); * q.setIndex(0); * q.setSize(20); * <p> * // example 3: * QueryObject q = new QueryObject(); * DetachedCriteria dc=q.generateDetachedCriteria(User.class); * dc.add(Restrictions.lt("id", 10L)); * ... * </pre></blockquote> * </p> * * @author RA */ final public class QueryObject { /** * DetachedCriteria */ private DetachedCriteria detachedCriteria; /** * Sql */ private String sql; /** * Sql argument */ private Object[] args; /** * Sql map */ private Map<String, Object> map; /** * First result index */ private int index = 0; /** * Maximum Results */ private int size = -1; public DetachedCriteria getDetachedCriteria() { return detachedCriteria; } /** * Set hibernate {@link DetachedCriteria} * * @param detachedCriteria DetachedCriteria * @see DetachedCriteria * @see Restrictions */ public void setDetachedCriteria(final DetachedCriteria detachedCriteria) { this.detachedCriteria = detachedCriteria; } /** * Generate hibernate {@link DetachedCriteria} * * @param clazz class * @see DetachedCriteria * @see Restrictions */ public DetachedCriteria generateDetachedCriteria(final Class<?> clazz) { DetachedCriteria dc = DetachedCriteria.forClass(clazz); this.detachedCriteria = dc; return dc; } /** * Generate hibernate {@link DetachedCriteria} * * @param clazz class * @param alias alias * @see DetachedCriteria * @see Restrictions */ public DetachedCriteria generateDetachedCriteria(final Class<?> clazz, String alias) { DetachedCriteria dc = DetachedCriteria.forClass(clazz, alias); this.detachedCriteria = dc; return dc; } /** * Generate hibernate {@link DetachedCriteria} * * @param entityName Entity name * @see DetachedCriteria * @see Restrictions */ public DetachedCriteria generateDetachedCriteria(String entityName) { DetachedCriteria dc = DetachedCriteria.forEntityName(entityName); this.detachedCriteria = dc; return dc; } /** * Generate hibernate {@link DetachedCriteria} * * @param entityName Entity name * @param alias alias * @see DetachedCriteria * @see Restrictions */ public DetachedCriteria generateDetachedCriteria(String entityName, String alias) { DetachedCriteria dc = DetachedCriteria.forEntityName(entityName, alias); this.detachedCriteria = dc; return dc; } public String getSql() { return sql; } /** * Set sql (<code>PreparedStatement</code>) * * @param sql sql string */ public void setSql(String sql) { this.sql = sql; } public Object[] getArgs() { if (args != null) { return Arrays.copyOf(args, args.length); } else { return null; } } /** * Set sql (<code>PreparedStatement</code>) arguments * * @param args sql args */ public void setArgs(final Object... args) { this.args = args; } public Map<String, Object> getMap() { return map; } /** * Set sql (<code>Map<String,Object></code>) arguments * <p> * <b>if hql param is ":id",the map key should be "id".</b> * </p> * * @param map sql map args */ public void setMap(final Map<String, Object> map) { this.map = map; } public int getIndex() { return index; } /** * Set first Result * * @param index index */ public void setIndex(int index) { if (index < 0) { index = 0; } this.index = index; } public int getSize() { return size; } /** * Set maximum Results * * @param size size */ public void setSize(int size) { if (size < 0) { size = -1; } this.size = size; } }