/*
 * Hibernate, Relational Persistence for Idiomatic Java
 *
 * Copyright (c) 2008, Red Hat Middleware LLC or third-party contributors as
 * indicated by the @author tags or express copyright attribution
 * statements applied by the authors.  All third-party contributions are
 * distributed under license by Red Hat Middleware LLC.
 *
 * This copyrighted material is made available to anyone wishing to use, modify,
 * copy, or redistribute it subject to the terms and conditions of the GNU
 * Lesser General Public License, as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
 * or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public License
 * for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with this distribution; if not, write to:
 * Free Software Foundation, Inc.
 * 51 Franklin Street, Fifth Floor
 * Boston, MA  02110-1301  USA
 *
 */
package org.hibernate.sql;
import org.hibernate.LockMode;
import org.hibernate.LockOptions;
import org.hibernate.dialect.Dialect;
import org.hibernate.internal.util.StringHelper;


A simple SQL SELECT statement
Author:Gavin King
/** * A simple SQL <tt>SELECT</tt> statement * @author Gavin King */
public class Select { private String selectClause; private String fromClause; private String outerJoinsAfterFrom; private String whereClause; private String outerJoinsAfterWhere; private String orderByClause; private String groupByClause; private String comment; private LockOptions lockOptions = new LockOptions(); public final Dialect dialect; private int guesstimatedBufferSize = 20; public Select(Dialect dialect) { this.dialect = dialect; }
Construct an SQL SELECT statement from the given clauses
/** * Construct an SQL <tt>SELECT</tt> statement from the given clauses */
public String toStatementString() { StringBuilder buf = new StringBuilder(guesstimatedBufferSize); if ( StringHelper.isNotEmpty(comment) ) { buf.append("/* ").append(comment).append(" */ "); } buf.append("select ").append(selectClause) .append(" from ").append(fromClause); if ( StringHelper.isNotEmpty(outerJoinsAfterFrom) ) { buf.append(outerJoinsAfterFrom); } if ( StringHelper.isNotEmpty(whereClause) || StringHelper.isNotEmpty(outerJoinsAfterWhere) ) { buf.append(" where " ); // the outerJoinsAfterWhere needs to come before where clause to properly // handle dynamic filters if ( StringHelper.isNotEmpty(outerJoinsAfterWhere) ) { buf.append(outerJoinsAfterWhere); if ( StringHelper.isNotEmpty(whereClause) ) { buf.append( " and " ); } } if ( StringHelper.isNotEmpty( whereClause ) ) { buf.append(whereClause); } } if ( StringHelper.isNotEmpty(groupByClause) ) { buf.append(" group by ").append(groupByClause); } if ( StringHelper.isNotEmpty(orderByClause) ) { buf.append(" order by ").append(orderByClause); } if (lockOptions.getLockMode()!=LockMode.NONE) { buf.append( dialect.getForUpdateString(lockOptions) ); } return dialect.transformSelectString( buf.toString() ); }
Sets the fromClause.
Params:
  • fromClause – The fromClause to set
/** * Sets the fromClause. * @param fromClause The fromClause to set */
public Select setFromClause(String fromClause) { this.fromClause = fromClause; this.guesstimatedBufferSize += fromClause.length(); return this; } public Select setFromClause(String tableName, String alias) { this.fromClause = tableName + ' ' + alias; this.guesstimatedBufferSize += fromClause.length(); return this; } public Select setOrderByClause(String orderByClause) { this.orderByClause = orderByClause; this.guesstimatedBufferSize += orderByClause.length(); return this; } public Select setGroupByClause(String groupByClause) { this.groupByClause = groupByClause; this.guesstimatedBufferSize += groupByClause.length(); return this; } public Select setOuterJoins(String outerJoinsAfterFrom, String outerJoinsAfterWhere) { this.outerJoinsAfterFrom = outerJoinsAfterFrom; // strip off any leading 'and' token String tmpOuterJoinsAfterWhere = outerJoinsAfterWhere.trim(); if ( tmpOuterJoinsAfterWhere.startsWith("and") ) { tmpOuterJoinsAfterWhere = tmpOuterJoinsAfterWhere.substring(4); } this.outerJoinsAfterWhere = tmpOuterJoinsAfterWhere; this.guesstimatedBufferSize += outerJoinsAfterFrom.length() + outerJoinsAfterWhere.length(); return this; }
Sets the selectClause.
Params:
  • selectClause – The selectClause to set
/** * Sets the selectClause. * @param selectClause The selectClause to set */
public Select setSelectClause(String selectClause) { this.selectClause = selectClause; this.guesstimatedBufferSize += selectClause.length(); return this; } public Select setSelectClause(SelectFragment selectFragment) { setSelectClause( selectFragment.toFragmentString().substring( 2 ) ); return this; }
Sets the whereClause.
Params:
  • whereClause – The whereClause to set
/** * Sets the whereClause. * @param whereClause The whereClause to set */
public Select setWhereClause(String whereClause) { this.whereClause = whereClause; this.guesstimatedBufferSize += whereClause.length(); return this; } public Select setComment(String comment) { this.comment = comment; this.guesstimatedBufferSize += comment.length(); return this; }
Get the current lock mode
Returns:LockMode
Deprecated:Instead use getLockOptions
/** * Get the current lock mode * @return LockMode * @deprecated Instead use getLockOptions */
public LockMode getLockMode() { return lockOptions.getLockMode(); }
Set the lock mode
Params:
  • lockMode –
Returns:this object
Deprecated:Instead use setLockOptions
/** * Set the lock mode * @param lockMode * @return this object * @deprecated Instead use setLockOptions */
public Select setLockMode(LockMode lockMode) { lockOptions.setLockMode(lockMode); return this; }
Get the current lock options
Returns:LockOptions
/** * Get the current lock options * @return LockOptions */
public LockOptions getLockOptions() { return lockOptions; }
Set the lock options
Params:
  • lockOptions –
Returns:this object
/** * Set the lock options * @param lockOptions * @return this object */
public Select setLockOptions(LockOptions lockOptions) { LockOptions.copy(lockOptions, this.lockOptions); return this; } }