org.hibernate.sql.Select#setFromClause ( )源码实例Demo

下面列出了org.hibernate.sql.Select#setFromClause ( ) 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。

源代码1 项目: lams   文件: AbstractEntityPersister.java
protected String renderSelect(
		final int[] tableNumbers,
		final int[] columnNumbers,
		final int[] formulaNumbers) {

	Arrays.sort( tableNumbers ); //get 'em in the right order (not that it really matters)

	//render the where and from parts
	int drivingTable = tableNumbers[0];
	final String drivingAlias = generateTableAlias(
			getRootAlias(),
			drivingTable
	); //we *could* regerate this inside each called method!
	final String where = createWhereByKey( drivingTable, drivingAlias );
	final String from = createFrom( drivingTable, drivingAlias );

	//now render the joins
	JoinFragment jf = createJoin( tableNumbers, drivingAlias );

	//now render the select clause
	SelectFragment selectFragment = createSelect( columnNumbers, formulaNumbers );

	//now tie it all together
	Select select = new Select( getFactory().getDialect() );
	select.setSelectClause( selectFragment.toFragmentString().substring( 2 ) );
	select.setFromClause( from );
	select.setWhereClause( where );
	select.setOuterJoins( jf.toFromFragmentString(), jf.toWhereFragmentString() );
	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		select.setComment( "sequential select " + getEntityName() );
	}
	return select.toStatementString();
}
 
源代码2 项目: lams   文件: AbstractTableBasedBulkIdHandler.java
protected Select generateIdSelect(
		String tableAlias,
		ProcessedWhereClause whereClause) {

	final Dialect dialect = sessionFactory.getJdbcServices().getJdbcEnvironment().getDialect();

	final Select select = new Select( dialect );
	final SelectValues selectClause = new SelectValues( dialect ).addColumns(
			tableAlias,
			getTargetedQueryable().getIdentifierColumnNames(),
			getTargetedQueryable().getIdentifierColumnNames()
	);
	addAnyExtraIdSelectValues( selectClause );
	select.setSelectClause( selectClause.render() );

	String rootTableName = getTargetedQueryable().getTableName();
	String fromJoinFragment = getTargetedQueryable().fromJoinFragment( tableAlias, true, false );
	String whereJoinFragment = getTargetedQueryable().whereJoinFragment( tableAlias, true, false );

	select.setFromClause( rootTableName + ' ' + tableAlias + fromJoinFragment );

	if ( whereJoinFragment == null ) {
		whereJoinFragment = "";
	}
	else {
		whereJoinFragment = whereJoinFragment.trim();
		if ( whereJoinFragment.startsWith( "and" ) ) {
			whereJoinFragment = whereJoinFragment.substring( 4 );
		}
	}

	if ( whereClause.getUserWhereClauseFragment().length() > 0 ) {
		if ( whereJoinFragment.length() > 0 ) {
			whereJoinFragment += " and ";
		}
	}
	select.setWhereClause( whereJoinFragment + whereClause.getUserWhereClauseFragment() );
	return select;
}
 
源代码3 项目: cacheonix-core   文件: AbstractEntityPersister.java
protected String renderSelect(
		final int[] tableNumbers,
        final int[] columnNumbers,
        final int[] formulaNumbers) {

	Arrays.sort( tableNumbers ); //get 'em in the right order (not that it really matters)

	//render the where and from parts
	int drivingTable = tableNumbers[0];
	final String drivingAlias = generateTableAlias( getRootAlias(), drivingTable ); //we *could* regerate this inside each called method!
	final String where = createWhereByKey( drivingTable, drivingAlias );
	final String from = createFrom( drivingTable, drivingAlias );

	//now render the joins
	JoinFragment jf = createJoin( tableNumbers, drivingAlias );

	//now render the select clause
	SelectFragment selectFragment = createSelect( columnNumbers, formulaNumbers );

	//now tie it all together
	Select select = new Select( getFactory().getDialect() );
	select.setSelectClause( selectFragment.toFragmentString().substring( 2 ) );
	select.setFromClause( from );
	select.setWhereClause( where );
	select.setOuterJoins( jf.toFromFragmentString(), jf.toWhereFragmentString() );
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		select.setComment( "sequential select " + getEntityName() );
	}
	return select.toStatementString();
}
 
源代码4 项目: lams   文件: AbstractEntityPersister.java
protected String generateIdByUniqueKeySelectString(String uniquePropertyName) {
	Select select = new Select( getFactory().getDialect() );

	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		select.setComment( "resolve id by unique property [" + getEntityName() + "." + uniquePropertyName + "]" );
	}

	final String rooAlias = getRootAlias();

	select.setFromClause( fromTableFragment( rooAlias ) + fromJoinFragment( rooAlias, true, false ) );

	SelectFragment selectFragment = new SelectFragment();
	selectFragment.addColumns( rooAlias, getIdentifierColumnNames(), getIdentifierAliases() );
	select.setSelectClause( selectFragment );

	StringBuilder whereClauseBuffer = new StringBuilder();
	final int uniquePropertyIndex = getSubclassPropertyIndex( uniquePropertyName );
	final String uniquePropertyTableAlias = generateTableAlias(
			rooAlias,
			getSubclassPropertyTableNumber( uniquePropertyIndex )
	);
	String sep = "";
	for ( String columnTemplate : getSubclassPropertyColumnReaderTemplateClosure()[uniquePropertyIndex] ) {
		if ( columnTemplate == null ) {
			continue;
		}
		final String columnReference = StringHelper.replace(
				columnTemplate,
				Template.TEMPLATE,
				uniquePropertyTableAlias
		);
		whereClauseBuffer.append( sep ).append( columnReference ).append( "=?" );
		sep = " and ";
	}
	for ( String formulaTemplate : getSubclassPropertyFormulaTemplateClosure()[uniquePropertyIndex] ) {
		if ( formulaTemplate == null ) {
			continue;
		}
		final String formulaReference = StringHelper.replace(
				formulaTemplate,
				Template.TEMPLATE,
				uniquePropertyTableAlias
		);
		whereClauseBuffer.append( sep ).append( formulaReference ).append( "=?" );
		sep = " and ";
	}
	whereClauseBuffer.append( whereJoinFragment( rooAlias, true, false ) );

	select.setWhereClause( whereClauseBuffer.toString() );

	return select.setOuterJoins( "", "" ).toStatementString();
}
 
源代码5 项目: lams   文件: AbstractEntityPersister.java
public Object[] getNaturalIdentifierSnapshot(Serializable id, SharedSessionContractImplementor session)
		throws HibernateException {
	if ( !hasNaturalIdentifier() ) {
		throw new MappingException(
				"persistent class did not define a natural-id : " + MessageHelper.infoString(
						this
				)
		);
	}
	if ( LOG.isTraceEnabled() ) {
		LOG.tracev(
				"Getting current natural-id snapshot state for: {0}",
				MessageHelper.infoString( this, id, getFactory() )
		);
	}

	int[] naturalIdPropertyIndexes = getNaturalIdentifierProperties();
	int naturalIdPropertyCount = naturalIdPropertyIndexes.length;
	boolean[] naturalIdMarkers = new boolean[getPropertySpan()];
	Type[] extractionTypes = new Type[naturalIdPropertyCount];
	for ( int i = 0; i < naturalIdPropertyCount; i++ ) {
		extractionTypes[i] = getPropertyTypes()[naturalIdPropertyIndexes[i]];
		naturalIdMarkers[naturalIdPropertyIndexes[i]] = true;
	}

	///////////////////////////////////////////////////////////////////////
	// TODO : look at perhaps caching this...
	Select select = new Select( getFactory().getDialect() );
	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		select.setComment( "get current natural-id state " + getEntityName() );
	}
	select.setSelectClause( concretePropertySelectFragmentSansLeadingComma( getRootAlias(), naturalIdMarkers ) );
	select.setFromClause( fromTableFragment( getRootAlias() ) + fromJoinFragment( getRootAlias(), true, false ) );

	String[] aliasedIdColumns = StringHelper.qualify( getRootAlias(), getIdentifierColumnNames() );
	String whereClause = new StringBuilder()
			.append(
					String.join(
							"=? and ",
							aliasedIdColumns
					)
			)
			.append( "=?" )
			.append( whereJoinFragment( getRootAlias(), true, false ) )
			.toString();

	String sql = select.setOuterJoins( "", "" )
			.setWhereClause( whereClause )
			.toStatementString();
	///////////////////////////////////////////////////////////////////////

	Object[] snapshot = new Object[naturalIdPropertyCount];
	try {
		PreparedStatement ps = session
				.getJdbcCoordinator()
				.getStatementPreparer()
				.prepareStatement( sql );
		try {
			getIdentifierType().nullSafeSet( ps, id, 1, session );
			ResultSet rs = session.getJdbcCoordinator().getResultSetReturn().extract( ps );
			try {
				//if there is no resulting row, return null
				if ( !rs.next() ) {
					return null;
				}
				final EntityKey key = session.generateEntityKey( id, this );
				Object owner = session.getPersistenceContext().getEntity( key );
				for ( int i = 0; i < naturalIdPropertyCount; i++ ) {
					snapshot[i] = extractionTypes[i].hydrate(
							rs, getPropertyAliases(
									"",
									naturalIdPropertyIndexes[i]
							), session, null
					);
					if ( extractionTypes[i].isEntityType() ) {
						snapshot[i] = extractionTypes[i].resolve( snapshot[i], session, owner );
					}
				}
				return snapshot;
			}
			finally {
				session.getJdbcCoordinator().getResourceRegistry().release( rs, ps );
			}
		}
		finally {
			session.getJdbcCoordinator().getResourceRegistry().release( ps );
			session.getJdbcCoordinator().afterStatementExecution();
		}
	}
	catch (SQLException e) {
		throw getFactory().getSQLExceptionHelper().convert(
				e,
				"could not retrieve snapshot: " + MessageHelper.infoString( this, id, getFactory() ),
				sql
		);
	}
}
 
源代码6 项目: lams   文件: AbstractEntityPersister.java
private String generateEntityIdByNaturalIdSql(boolean[] valueNullness) {
	EntityPersister rootPersister = getFactory().getEntityPersister( getRootEntityName() );
	if ( rootPersister != this ) {
		if ( rootPersister instanceof AbstractEntityPersister ) {
			return ( (AbstractEntityPersister) rootPersister ).generateEntityIdByNaturalIdSql( valueNullness );
		}
	}

	Select select = new Select( getFactory().getDialect() );
	if ( getFactory().getSessionFactoryOptions().isCommentsEnabled() ) {
		select.setComment( "get current natural-id->entity-id state " + getEntityName() );
	}

	final String rootAlias = getRootAlias();

	select.setSelectClause( identifierSelectFragment( rootAlias, "" ) );
	select.setFromClause( fromTableFragment( rootAlias ) + fromJoinFragment( rootAlias, true, false ) );

	final StringBuilder whereClause = new StringBuilder();
	final int[] propertyTableNumbers = getPropertyTableNumbers();
	final int[] naturalIdPropertyIndexes = this.getNaturalIdentifierProperties();
	int valuesIndex = -1;
	for ( int propIdx = 0; propIdx < naturalIdPropertyIndexes.length; propIdx++ ) {
		valuesIndex++;
		if ( propIdx > 0 ) {
			whereClause.append( " and " );
		}

		final int naturalIdIdx = naturalIdPropertyIndexes[propIdx];
		final String tableAlias = generateTableAlias( rootAlias, propertyTableNumbers[naturalIdIdx] );
		final String[] propertyColumnNames = getPropertyColumnNames( naturalIdIdx );
		final String[] aliasedPropertyColumns = StringHelper.qualify( tableAlias, propertyColumnNames );

		if ( valueNullness != null && valueNullness[valuesIndex] ) {
			whereClause.append( String.join( " is null and ", aliasedPropertyColumns ) ).append( " is null" );
		}
		else {
			whereClause.append( String.join( "=? and ", aliasedPropertyColumns ) ).append( "=?" );
		}
	}

	whereClause.append( whereJoinFragment( getRootAlias(), true, false ) );

	return select.setOuterJoins( "", "" ).setWhereClause( whereClause.toString() ).toStatementString();
}
 
源代码7 项目: cacheonix-core   文件: AbstractEntityPersister.java
public Object[] getNaturalIdentifierSnapshot(Serializable id, SessionImplementor session) throws HibernateException {
	if ( !hasNaturalIdentifier() ) {
		throw new MappingException( "persistent class did not define a natural-id : " + MessageHelper.infoString( this ) );
	}
	if ( log.isTraceEnabled() ) {
		log.trace( "Getting current natural-id snapshot state for: " + MessageHelper.infoString( this, id, getFactory() ) );
	}

	int[] naturalIdPropertyIndexes = getNaturalIdentifierProperties();
	int naturalIdPropertyCount = naturalIdPropertyIndexes.length;
	boolean[] naturalIdMarkers = new boolean[ getPropertySpan() ];
	Type[] extractionTypes = new Type[ naturalIdPropertyCount ];
	for ( int i = 0; i < naturalIdPropertyCount; i++ ) {
		extractionTypes[i] = getPropertyTypes()[ naturalIdPropertyIndexes[i] ];
		naturalIdMarkers[ naturalIdPropertyIndexes[i] ] = true;
	}

	///////////////////////////////////////////////////////////////////////
	// TODO : look at perhaps caching this...
	Select select = new Select( getFactory().getDialect() );
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		select.setComment( "get current natural-id state " + getEntityName() );
	}
	select.setSelectClause( concretePropertySelectFragmentSansLeadingComma( getRootAlias(), naturalIdMarkers ) );
	select.setFromClause( fromTableFragment( getRootAlias() ) + fromJoinFragment( getRootAlias(), true, false ) );

	String[] aliasedIdColumns = StringHelper.qualify( getRootAlias(), getIdentifierColumnNames() );
	String whereClause = new StringBuffer()
		.append( StringHelper.join( "=? and ",
				aliasedIdColumns ) )
		.append( "=?" )
		.append( whereJoinFragment( getRootAlias(), true, false ) )
		.toString();

	String sql = select.setOuterJoins( "", "" )
			.setWhereClause( whereClause )
			.toStatementString();
	///////////////////////////////////////////////////////////////////////

	Object[] snapshot = new Object[ naturalIdPropertyCount ];
	try {
		PreparedStatement ps = session.getBatcher().prepareSelectStatement( sql );
		try {
			getIdentifierType().nullSafeSet( ps, id, 1, session );
			ResultSet rs = ps.executeQuery();
			try {
				//if there is no resulting row, return null
				if ( !rs.next() ) {
					return null;
				}

				for ( int i = 0; i < naturalIdPropertyCount; i++ ) {
					snapshot[i] = extractionTypes[i].hydrate( rs, getPropertyAliases( "", naturalIdPropertyIndexes[i] ), session, null );
				}
				return snapshot;
			}
			finally {
				rs.close();
			}
		}
		finally {
			session.getBatcher().closeStatement( ps );
		}
	}
	catch ( SQLException sqle ) {
		throw JDBCExceptionHelper.convert(
				getFactory().getSQLExceptionConverter(),
				sqle,
				"could not retrieve snapshot: " +
				MessageHelper.infoString( this, id, getFactory() ),
		        sql
			);
	}
}
 
protected String generateIdInsertSelect(Queryable persister, String tableAlias, AST whereClause) {
	Select select = new Select( getFactory().getDialect() );
	SelectFragment selectFragment = new SelectFragment()
			.addColumns( tableAlias, persister.getIdentifierColumnNames(), persister.getIdentifierColumnNames() );
	select.setSelectClause( selectFragment.toFragmentString().substring( 2 ) );

	String rootTableName = persister.getTableName();
	String fromJoinFragment = persister.fromJoinFragment( tableAlias, true, false );
	String whereJoinFragment = persister.whereJoinFragment( tableAlias, true, false );

	select.setFromClause( rootTableName + ' ' + tableAlias + fromJoinFragment );

	if ( whereJoinFragment == null ) {
		whereJoinFragment = "";
	}
	else {
		whereJoinFragment = whereJoinFragment.trim();
		if ( whereJoinFragment.startsWith( "and" ) ) {
			whereJoinFragment = whereJoinFragment.substring( 4 );
		}
	}

	String userWhereClause = "";
	if ( whereClause.getNumberOfChildren() != 0 ) {
		// If a where clause was specified in the update/delete query, use it to limit the
		// returned ids here...
		try {
			SqlGenerator sqlGenerator = new SqlGenerator( getFactory() );
			sqlGenerator.whereClause( whereClause );
			userWhereClause = sqlGenerator.getSQL().substring( 7 );  // strip the " where "
		}
		catch ( RecognitionException e ) {
			throw new HibernateException( "Unable to generate id select for DML operation", e );
		}
		if ( whereJoinFragment.length() > 0 ) {
			whereJoinFragment += " and ";
		}
	}

	select.setWhereClause( whereJoinFragment + userWhereClause );

	InsertSelect insert = new InsertSelect( getFactory().getDialect() );
	if ( getFactory().getSettings().isCommentsEnabled() ) {
		insert.setComment( "insert-select for " + persister.getEntityName() + " ids" );
	}
	insert.setTableName( persister.getTemporaryIdTableName() );
	insert.setSelect( select );
	return insert.toStatementString();
}