⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pathexpressionparser.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
	private PropertyMapping getPropertyMapping() {		return currentPropertyMapping;	}	private void setType() throws QueryException {		if ( currentProperty == null ) {			type = getPropertyMapping().getType();		}		else {			type = getPropertyType();		}	}	protected Type getPropertyType() throws QueryException {		String propertyPath = getPropertyPath();		Type propertyType = getPropertyMapping().toType( propertyPath );		if ( propertyType == null ) {			throw new QueryException( "could not resolve property type: " + propertyPath );		}		return propertyType;	}	protected String[] currentColumns() throws QueryException {		String propertyPath = getPropertyPath();		String[] propertyColumns = getPropertyMapping().toColumns( currentName, propertyPath );		if ( propertyColumns == null ) {			throw new QueryException( "could not resolve property columns: " + propertyPath );		}		return propertyColumns;	}	private void reset(QueryTranslatorImpl q) {		//join = q.createJoinFragment(useThetaStyleJoin);		dotcount = 0;		currentName = null;		currentProperty = null;		collectionName = null;		collectionRole = null;		componentPath.setLength( 0 );		type = null;		collectionName = null;		columns = null;		expectingCollectionIndex = false;		continuation = false;		currentPropertyMapping = null;	}	public void start(QueryTranslatorImpl q) {		if ( !continuation ) {			reset( q );			path.setLength( 0 );			joinSequence = new JoinSequence( q.getFactory() ).setUseThetaStyle( useThetaStyleJoin );		}	}	public void end(QueryTranslatorImpl q) throws QueryException {		ignoreInitialJoin = false;		Type propertyType = getPropertyType();		if ( propertyType != null && propertyType.isCollectionType() ) {			collectionRole = ( ( CollectionType ) propertyType ).getRole();			collectionName = q.createNameForCollection( collectionRole );			prepareForIndex( q );		}		else {			columns = currentColumns();			setType();		}		//important!!		continuation = false;	}	private void prepareForIndex(QueryTranslatorImpl q) throws QueryException {		QueryableCollection collPersister = q.getCollectionPersister( collectionRole );		if ( !collPersister.hasIndex() ) throw new QueryException( "unindexed collection before []: " + path );		String[] indexCols = collPersister.getIndexColumnNames();		if ( indexCols.length != 1 ) throw new QueryException( "composite-index appears in []: " + path );		//String[] keyCols = collPersister.getKeyColumnNames();		JoinSequence fromJoins = new JoinSequence( q.getFactory() )				.setUseThetaStyle( useThetaStyleJoin )				.setRoot( collPersister, collectionName )				.setNext( joinSequence.copy() );		if ( !continuation ) addJoin( collectionName, collPersister.getCollectionType() );		joinSequence.addCondition( collectionName + '.' + indexCols[0] + " = " ); //TODO: get SQL rendering out of here		CollectionElement elem = new CollectionElement();		elem.elementColumns = collPersister.getElementColumnNames(collectionName);		elem.elementType = collPersister.getElementType();		elem.isOneToMany = collPersister.isOneToMany();		elem.alias = collectionName;		elem.joinSequence = joinSequence;		collectionElements.addLast( elem );		setExpectingCollectionIndex();		q.addCollection( collectionName, collectionRole );		q.addFromJoinOnly( collectionName, fromJoins );	}	static final class CollectionElement {		Type elementType;		boolean isOneToMany;		String alias;		String[] elementColumns;		JoinSequence joinSequence;		StringBuffer indexValue = new StringBuffer();	}	public CollectionElement lastCollectionElement() {		return ( CollectionElement ) collectionElements.removeLast();	}	public void setLastCollectionElementIndexValue(String value) {		( ( CollectionElement ) collectionElements.getLast() ).indexValue.append( value );	}	public boolean isExpectingCollectionIndex() {		return expectingCollectionIndex;	}	protected void setExpectingCollectionIndex() throws QueryException {		expectingCollectionIndex = true;	}	public JoinSequence getWhereJoin() {		return joinSequence;	}	public String getWhereColumn() throws QueryException {		if ( columns.length != 1 ) {			throw new QueryException( "path expression ends in a composite value: " + path );		}		return columns[0];	}	public String[] getWhereColumns() {		return columns;	}	public Type getWhereColumnType() {		return type;	}	public String getName() {		return currentName == null ? collectionName : currentName;	}	public String getCollectionSubquery(Map enabledFilters) throws QueryException {		return CollectionSubqueryFactory.createCollectionSubquery( joinSequence, enabledFilters, currentColumns() );	}	public boolean isCollectionValued() throws QueryException {		//TODO: is there a better way?		return collectionName != null && !getPropertyType().isCollectionType();	}	public void addAssociation(QueryTranslatorImpl q) throws QueryException {		q.addJoin( getName(), joinSequence );	}	public String addFromAssociation(QueryTranslatorImpl q) throws QueryException {		if ( isCollectionValued() ) {			return addFromCollection( q );		}		else {			q.addFrom( currentName, joinSequence );			return currentName;		}	}	public String addFromCollection(QueryTranslatorImpl q) throws QueryException {		Type collectionElementType = getPropertyType();		if ( collectionElementType == null ) {			throw new QueryException( "must specify 'elements' for collection valued property in from clause: " + path );		}		if ( collectionElementType.isEntityType() ) {			// an association			QueryableCollection collectionPersister = q.getCollectionPersister( collectionRole );			Queryable entityPersister = ( Queryable ) collectionPersister.getElementPersister();			String clazz = entityPersister.getEntityName();			final String elementName;			if ( collectionPersister.isOneToMany() ) {				elementName = collectionName;				//allow index() function:				q.decoratePropertyMapping( elementName, collectionPersister );			}			else { //many-to-many				q.addCollection( collectionName, collectionRole );				elementName = q.createNameFor( clazz );				addJoin( elementName, ( AssociationType ) collectionElementType );			}			q.addFrom( elementName, clazz, joinSequence );			currentPropertyMapping = new CollectionPropertyMapping( collectionPersister );			return elementName;		}		else {			// collections of values			q.addFromCollection( collectionName, collectionRole, joinSequence );			return collectionName;		}	}	String getCollectionName() {		return collectionName;	}	String getCollectionRole() {		return collectionRole;	}	String getCollectionOwnerName() {		return collectionOwnerName;	}	String getOneToOneOwnerName() {		return oneToOneOwnerName;	}	AssociationType getOwnerAssociationType() {		return ownerAssociationType;	}	String getCurrentProperty() {		return currentProperty;	}	String getCurrentName() {		return currentName;	}	public void fetch(QueryTranslatorImpl q, String entityName) throws QueryException {		if ( isCollectionValued() ) {			q.setCollectionToFetch( getCollectionRole(), getCollectionName(), getCollectionOwnerName(), entityName );		}		else {			q.addEntityToFetch( entityName, getOneToOneOwnerName(), getOwnerAssociationType() );		}	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -