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

📄 joinedsubclassentitypersister.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
			);			notNullColumnTableNumbers[subclassSpan-1] = id;			notNullColumnNames = new String[subclassSpan];			notNullColumnNames[subclassSpan-1] =  subclassTableKeyColumnClosure[id][0]; //( (Column) model.getTable().getPrimaryKey().getColumnIterator().next() ).getName();		}		else {			discriminatorValues = null;			notNullColumnTableNumbers = null;			notNullColumnNames = null;		}		iter = persistentClass.getSubclassIterator();		int k=0;		while ( iter.hasNext() ) {			Subclass sc = (Subclass) iter.next();			subclassClosure[k] = sc.getEntityName();			try {				if ( persistentClass.isPolymorphic() ) {					// we now use subclass ids that are consistent across all					// persisters for a class hierarchy, so that the use of					// "foo.class = Bar" works in HQL					Integer subclassId = new Integer( sc.getSubclassId() );//new Integer(k+1);					subclassesByDiscriminatorValue.put( subclassId, sc.getEntityName() );					discriminatorValues[k] = subclassId.toString();					int id = getTableId(						sc.getTable().getQualifiedName(								factory.getDialect(),								factory.getSettings().getDefaultCatalogName(),								factory.getSettings().getDefaultSchemaName()						),						subclassTableNameClosure					);					notNullColumnTableNumbers[k] = id;					notNullColumnNames[k] = subclassTableKeyColumnClosure[id][0]; //( (Column) sc.getTable().getPrimaryKey().getColumnIterator().next() ).getName();				}			}			catch (Exception e) {				throw new MappingException("Error parsing discriminator value", e );			}			k++;		}		initLockers();		initSubclassPropertyAliasesMap(persistentClass);		postConstruct(mapping);	}	/*public void postInstantiate() throws MappingException {		super.postInstantiate();		//TODO: other lock modes?		loader = createEntityLoader(LockMode.NONE, CollectionHelper.EMPTY_MAP);	}*/	public String getSubclassPropertyTableName(int i) {		return subclassTableNameClosure[ subclassPropertyTableNumberClosure[i] ];	}	public Type getDiscriminatorType() {		return Hibernate.INTEGER;	}	public String getDiscriminatorSQLValue() {		return discriminatorSQLString;	}	public String getSubclassForDiscriminatorValue(Object value) {		return (String) subclassesByDiscriminatorValue.get(value);	}	public Serializable[] getPropertySpaces() {		return spaces; // don't need subclass tables, because they can't appear in conditions	}	protected String getTableName(int j) {		return naturalOrderTableNames[j];	}	protected String[] getKeyColumns(int j) {		return naturalOrderTableKeyColumns[j];	}	protected boolean isTableCascadeDeleteEnabled(int j) {		return naturalOrderCascadeDeleteEnabled[j];	}	protected boolean isPropertyOfTable(int property, int j) {		return naturalOrderPropertyTableNumbers[property]==j;	}	/**	 * Load an instance using either the <tt>forUpdateLoader</tt> or the outer joining <tt>loader</tt>,	 * depending upon the value of the <tt>lock</tt> parameter	 */	/*public Object load(Serializable id,	Object optionalObject, LockMode lockMode, SessionImplementor session)	throws HibernateException {		if ( log.isTraceEnabled() ) log.trace( "Materializing entity: " + MessageHelper.infoString(this, id) );		final UniqueEntityLoader loader = hasQueryLoader() ?				getQueryLoader() :				this.loader;		try {			final Object result = loader.load(id, optionalObject, session);			if (result!=null) lock(id, getVersion(result), result, lockMode, session);			return result;		}		catch (SQLException sqle) {			throw new JDBCException( "could not load by id: " +  MessageHelper.infoString(this, id), sqle );		}	}*/	private static final void reverse(Object[] objects, int len) {		Object[] temp = new Object[len];		for (int i=0; i<len; i++) {			temp[i] = objects[len-i-1];		}		for (int i=0; i<len; i++) {			objects[i] = temp[i];		}	}	private static final String[] reverse(String[] objects) {		int len = objects.length;		String[] temp = new String[len];		for (int i=0; i<len; i++) {			temp[i] = objects[len-i-1];		}		return temp;	}	private static final String[][] reverse(String[][] objects) {		int len = objects.length;		String[][] temp = new String[len][];		for (int i=0; i<len; i++) {			temp[i] = objects[len-i-1];		}		return temp;	}	public String fromTableFragment(String alias) {		return getTableName() + ' ' + alias;	}	public String getTableName() {		return tableNames[0];	}	private static int getTableId(String tableName, String[] tables) {		for ( int j=0; j<tables.length; j++ ) {			if ( tableName.equals( tables[j] ) ) {				return j;			}		}		throw new AssertionFailure("Table " + tableName + " not found");	}	public void addDiscriminatorToSelect(SelectFragment select, String name, String suffix) {		if ( hasSubclasses() ) {			select.setExtraSelectList( discriminatorFragment(name), getDiscriminatorAlias() );		}	}	private CaseFragment discriminatorFragment(String alias) {		CaseFragment cases = getFactory().getDialect().createCaseFragment();		for ( int i=0; i<discriminatorValues.length; i++ ) {			cases.addWhenColumnNotNull(				generateTableAlias( alias, notNullColumnTableNumbers[i] ),				notNullColumnNames[i],				discriminatorValues[i]			);		}		return cases;	}	public String filterFragment(String alias) {		return hasWhere() ?			" and " + getSQLWhereString( generateFilterConditionAlias( alias ) ) :			"";	}	public String generateFilterConditionAlias(String rootAlias) {		return generateTableAlias( rootAlias, tableSpan-1 );	}	public String[] getIdentifierColumnNames() {		return tableKeyColumns[0];	}	public String[] toColumns(String alias, String propertyName) throws QueryException {		if ( ENTITY_CLASS.equals(propertyName) ) {			// This doesn't actually seem to work but it *might*			// work on some dbs. Also it doesn't work if there			// are multiple columns of results because it			// is not accounting for the suffix:			// return new String[] { getDiscriminatorColumnName() };			return new String[] { discriminatorFragment(alias).toFragmentString() };		}		else {			return super.toColumns(alias, propertyName);		}	}	protected int[] getPropertyTableNumbersInSelect() {		return propertyTableNumbers;	}	protected int getSubclassPropertyTableNumber(int i) {		return subclassPropertyTableNumberClosure[i];	}	public int getTableSpan() {		return tableSpan;	}	public boolean isMultiTable() {		return true;	}	protected int[] getSubclassColumnTableNumberClosure() {		return subclassColumnTableNumberClosure;	}	protected int[] getSubclassFormulaTableNumberClosure() {		return subclassFormulaTableNumberClosure;	}	protected int[] getPropertyTableNumbers() {		return naturalOrderPropertyTableNumbers;	}	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];	}	public String getPropertyTableName(String propertyName) {		Integer index = getEntityMetamodel().getPropertyIndexOrNull(propertyName);		if ( index == null ) {			return null;		}		return tableNames[ propertyTableNumbers[ index.intValue() ] ];	}	public String[] getConstraintOrderedTableNameClosure() {		return constraintOrderedTableNames;	}	public String[][] getContraintOrderedTableKeyColumnClosure() {		return constraintOrderedKeyColumnNames;	}	public String getRootTableName() {		return naturalOrderTableNames[0];	}	public String getRootTableAlias(String drivingAlias) {		return generateTableAlias( drivingAlias, getTableId( getRootTableName(), tableNames ) );	}	public Declarer getSubclassPropertyDeclarer(String propertyPath) {		if ( "class".equals( propertyPath ) ) {			// special case where we need to force incloude all subclass joins			return Declarer.SUBCLASS;		}		return super.getSubclassPropertyDeclarer( propertyPath );	}}

⌨️ 快捷键说明

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