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

📄 singletableentitypersister.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					columnJoinNumbers.add(join);				}			}		}		subclassColumnTableNumberClosure = ArrayHelper.toIntArray(columnJoinNumbers);		subclassFormulaTableNumberClosure = ArrayHelper.toIntArray(formulaJoinedNumbers);		subclassPropertyTableNumberClosure = ArrayHelper.toIntArray(propertyJoinNumbers);		int subclassSpan = persistentClass.getSubclassSpan() + 1;		subclassClosure = new String[subclassSpan];		subclassClosure[0] = getEntityName();		if ( persistentClass.isPolymorphic() ) {			subclassesByDiscriminatorValue.put( discriminatorValue, getEntityName() );		}		// SUBCLASSES		if ( persistentClass.isPolymorphic() ) {			iter = persistentClass.getSubclassIterator();			int k=1;			while ( iter.hasNext() ) {				Subclass sc = (Subclass) iter.next();				subclassClosure[k++] = sc.getEntityName();				if ( sc.isDiscriminatorValueNull() ) {					subclassesByDiscriminatorValue.put( NULL_DISCRIMINATOR, sc.getEntityName() );				}				else if ( sc.isDiscriminatorValueNotNull() ) {					subclassesByDiscriminatorValue.put( NOT_NULL_DISCRIMINATOR, sc.getEntityName() );				}				else {					try {						DiscriminatorType dtype = (DiscriminatorType) discriminatorType;						subclassesByDiscriminatorValue.put(							dtype.stringToObject( sc.getDiscriminatorValue() ),							sc.getEntityName()						);					}					catch (ClassCastException cce) {						throw new MappingException("Illegal discriminator type: " + discriminatorType.getName() );					}					catch (Exception e) {						throw new MappingException("Error parsing discriminator value", e);					}				}			}		}		initLockers();		initSubclassPropertyAliasesMap(persistentClass);				postConstruct(mapping);	}	protected boolean isInverseTable(int j) {		return isInverseTable[j];	}	protected boolean isInverseSubclassTable(int j) {		return isInverseSubclassTable[j];	}	public String getDiscriminatorColumnName() {		return discriminatorColumnName;	}	protected String getDiscriminatorAlias() {		return discriminatorAlias;	}	protected String getDiscriminatorFormulaTemplate() {		return discriminatorFormulaTemplate;	}	public String getTableName() {		return qualifiedTableNames[0];	}	public Type getDiscriminatorType() {		return discriminatorType;	}	public String getDiscriminatorSQLValue() {		return discriminatorSQLValue;	}	public String[] getSubclassClosure() {		return subclassClosure;	}	public String getSubclassForDiscriminatorValue(Object value) {		if (value==null) {			return (String) subclassesByDiscriminatorValue.get(NULL_DISCRIMINATOR);		}		else {			String result = (String) subclassesByDiscriminatorValue.get(value);			if (result==null) result = (String) subclassesByDiscriminatorValue.get(NOT_NULL_DISCRIMINATOR);			return result;		}	}	public Serializable[] getPropertySpaces() {		return spaces;	}	//Access cached SQL	protected boolean isDiscriminatorFormula() {		return discriminatorColumnName==null;	}	protected String getDiscriminatorFormula() {		return discriminatorFormula;	}	protected String getTableName(int j) {		return qualifiedTableNames[j];	}		protected String[] getKeyColumns(int j) {		return keyColumnNames[j];	}		protected boolean isTableCascadeDeleteEnabled(int j) {		return cascadeDeleteEnabled[j];	}		protected boolean isPropertyOfTable(int property, int j) {		return propertyTableNumbers[property]==j;	}	protected boolean isSubclassTableSequentialSelect(int j) {		return subclassTableSequentialSelect[j] && !isClassOrSuperclassTable[j];	}		// Execute the SQL:	public String fromTableFragment(String name) {		return getTableName() + ' ' + name;	}	public String filterFragment(String alias) throws MappingException {		String result = discriminatorFilterFragment(alias);		if ( hasWhere() ) result += " and " + getSQLWhereString(alias);		return result;	}		public String oneToManyFilterFragment(String alias) throws MappingException {		return forceDiscriminator ?			discriminatorFilterFragment(alias) :			"";	}	private String discriminatorFilterFragment(String alias) throws MappingException {		if ( needsDiscriminator() ) {			InFragment frag = new InFragment();			if ( isDiscriminatorFormula() ) {				frag.setFormula( alias, getDiscriminatorFormulaTemplate() );			}			else {				frag.setColumn( alias, getDiscriminatorColumnName() );			}			String[] subclasses = getSubclassClosure();			for ( int i=0; i<subclasses.length; i++ ) {				final Queryable queryable = (Queryable) getFactory().getEntityPersister( subclasses[i] );				if ( !queryable.isAbstract() ) frag.addValue( queryable.getDiscriminatorSQLValue() );			}			StringBuffer buf = new StringBuffer(50)				.append(" and ")				.append( frag.toFragmentString() );			return buf.toString();		}		else {			return "";		}	}	private boolean needsDiscriminator() {		return forceDiscriminator || isInherited();	}	public String getSubclassPropertyTableName(int i) {		return subclassTableNameClosure[ subclassPropertyTableNumberClosure[i] ];	}	protected void addDiscriminatorToSelect(SelectFragment select, String name, String suffix) {		if ( isDiscriminatorFormula() ) {			select.addFormula( name, getDiscriminatorFormulaTemplate(), getDiscriminatorAlias() );		}		else {			select.addColumn( name, getDiscriminatorColumnName(),  getDiscriminatorAlias() );		}	}		protected int[] getPropertyTableNumbersInSelect() {		return propertyTableNumbers;	}	protected int getSubclassPropertyTableNumber(int i) {		return subclassPropertyTableNumberClosure[i];	}	public int getTableSpan() {		return joinSpan;	}	protected void addDiscriminatorToInsert(Insert insert) {		if (discriminatorInsertable) {			insert.addColumn( getDiscriminatorColumnName(), discriminatorSQLValue );		}	}	protected int[] getSubclassColumnTableNumberClosure() {		return subclassColumnTableNumberClosure;	}	protected int[] getSubclassFormulaTableNumberClosure() {		return subclassFormulaTableNumberClosure;	}	protected int[] getPropertyTableNumbers() {		return propertyTableNumbers;	}			protected boolean isSubclassPropertyDeferred(String propertyName, String entityName) {		return hasSequentialSelects && 			isSubclassTableSequentialSelect( getSubclassPropertyTableNumber(propertyName, entityName) );	}		public boolean hasSequentialSelect() {		return hasSequentialSelects;	}		private int getSubclassPropertyTableNumber(String propertyName, String entityName) {		Type type = propertyMapping.toType(propertyName);		if ( type.isAssociationType() && ( (AssociationType) type ).useLHSPrimaryKey() ) return 0;		final Integer tabnum = (Integer) propertyTableNumbersByNameAndSubclass.get(entityName + '.' + propertyName);		return tabnum==null ? 0 : tabnum.intValue();	}		protected String getSequentialSelect(String entityName) {		return (String) sequentialSelectStringsByEntityName.get(entityName);	}	private String generateSequentialSelect(Loadable persister) {		//if ( this==persister || !hasSequentialSelects ) return null;		//note that this method could easily be moved up to BasicEntityPersister,		//if we ever needed to reuse it from other subclasses				//figure out which tables need to be fetched		AbstractEntityPersister subclassPersister = (AbstractEntityPersister) persister;		HashSet tableNumbers = new HashSet();		String[] props = subclassPersister.getPropertyNames();		String[] classes = subclassPersister.getPropertySubclassNames();		for ( int i=0; i<props.length; i++ ) {			int propTableNumber = getSubclassPropertyTableNumber( props[i], classes[i] );			if ( isSubclassTableSequentialSelect(propTableNumber) && !isSubclassTableLazy(propTableNumber) ) {				tableNumbers.add( new Integer(propTableNumber) );			}		}		if ( tableNumbers.isEmpty() ) return null;				//figure out which columns are needed		ArrayList columnNumbers = new ArrayList();		final int[] columnTableNumbers = getSubclassColumnTableNumberClosure();		for ( int i=0; i<getSubclassColumnClosure().length; i++ ) {			if ( tableNumbers.contains( new Integer( columnTableNumbers[i] ) ) ) {				columnNumbers.add( new Integer(i) );			}		}				//figure out which formulas are needed		ArrayList formulaNumbers = new ArrayList();		final int[] formulaTableNumbers = getSubclassColumnTableNumberClosure();		for ( int i=0; i<getSubclassFormulaTemplateClosure().length; i++ ) {			if ( tableNumbers.contains( new Integer( formulaTableNumbers[i] ) ) ) {				formulaNumbers.add( new Integer(i) );			}		}				//render the SQL		return renderSelect( 			ArrayHelper.toIntArray(tableNumbers),			ArrayHelper.toIntArray(columnNumbers),			ArrayHelper.toIntArray(formulaNumbers)		);	}					protected String[] getSubclassTableKeyColumns(int j) {		return subclassTableKeyColumnClosure[j];	}	public String getSubclassTableName(int j) {		return subclassTableNameClosure[j];	}	public int getSubclassTableSpan() {		return subclassTableNameClosure.length;	}	protected boolean isClassOrSuperclassTable(int j) {		return isClassOrSuperclassTable[j];	}	protected boolean isSubclassTableLazy(int j) {		return subclassTableIsLazyClosure[j];	}		protected boolean isNullableTable(int j) {		return isNullableTable[j];	}		protected boolean isNullableSubclassTable(int j) {		return isNullableSubclassTable[j];	}	public String getPropertyTableName(String propertyName) {		Integer index = getEntityMetamodel().getPropertyIndexOrNull(propertyName);		if (index==null) return null;		return qualifiedTableNames[ propertyTableNumbers[ index.intValue() ] ];	}		public void postInstantiate() {		super.postInstantiate();		if (hasSequentialSelects) {			String[] entityNames = getSubclassClosure();			for ( int i=1; i<entityNames.length; i++ ) {				Loadable loadable = (Loadable) getFactory().getEntityPersister( entityNames[i] );				if ( !loadable.isAbstract() ) { //perhaps not really necessary...					String sequentialSelect = generateSequentialSelect(loadable);					sequentialSelectStringsByEntityName.put( entityNames[i], sequentialSelect );				}			}		}	}	public boolean isMultiTable() {		return getTableSpan() > 1;	}	public String[] getConstraintOrderedTableNameClosure() {		return constraintOrderedTableNames;	}	public String[][] getContraintOrderedTableKeyColumnClosure() {		return constraintOrderedKeyColumnNames;	}}

⌨️ 快捷键说明

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