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

📄 abstractentitypersister.java

📁 一个Java持久层类库
💻 JAVA
📖 第 1 页 / 共 5 页
字号:
				alias,				new InclusionChecker() {					public boolean includeProperty(int propertyNumber) {						return includeProperty[propertyNumber];					}				}		);	}	protected String concretePropertySelectFragment(String alias, InclusionChecker inclusionChecker) {		int propertyCount = getPropertyNames().length;		int[] propertyTableNumbers = getPropertyTableNumbersInSelect();		SelectFragment frag = new SelectFragment();		for ( int i = 0; i < propertyCount; i++ ) {			if ( inclusionChecker.includeProperty( i ) ) {				frag.addColumns(						generateTableAlias( alias, propertyTableNumbers[i] ),						propertyColumnNames[i],						propertyColumnAliases[i]				);				frag.addFormulas(						generateTableAlias( alias, propertyTableNumbers[i] ),						propertyColumnFormulaTemplates[i],						propertyColumnAliases[i]				);			}		}		return frag.toFragmentString();	}	protected String generateSnapshotSelectString() {		//TODO: should we use SELECT .. FOR UPDATE?		Select select = new Select( getFactory().getDialect() );		if ( getFactory().getSettings().isCommentsEnabled() ) {			select.setComment( "get current state " + getEntityName() );		}		String[] aliasedIdColumns = StringHelper.qualify( getRootAlias(), getIdentifierColumnNames() );		String selectClause = StringHelper.join( ", ", aliasedIdColumns ) +				concretePropertySelectFragment( getRootAlias(), getPropertyUpdateability() );		String fromClause = fromTableFragment( getRootAlias() ) +				fromJoinFragment( getRootAlias(), true, false );		String whereClause = new StringBuffer()			.append( StringHelper.join( "=? and ",					aliasedIdColumns ) )			.append( "=?" )			.append( whereJoinFragment( getRootAlias(), true, false ) )			.toString();		/*if ( isVersioned() ) {			where.append(" and ")				.append( getVersionColumnName() )				.append("=?");		}*/		return select.setSelectClause( selectClause )				.setFromClause( fromClause )				.setOuterJoins( "", "" )				.setWhereClause( whereClause )				.toStatementString();	}	public Object forceVersionIncrement(Serializable id, Object currentVersion, SessionImplementor session) {		if ( !isVersioned() ) {			throw new AssertionFailure( "cannot force version increment on non-versioned entity" );		}		if ( isVersionPropertyGenerated() ) {			// the difficulty here is exactly what do we update in order to			// force the version to be incremented in the db...			throw new HibernateException( "LockMode.FORCE is currently not supported for generated version properties" );		}		Object nextVersion = getVersionType().next( currentVersion, session );		if ( log.isTraceEnabled() ) {			log.trace(					"Forcing version increment [" + MessageHelper.infoString( this, id, getFactory() ) +					"; " + getVersionType().toLoggableString( currentVersion, getFactory() ) +					" -> " + getVersionType().toLoggableString( nextVersion, getFactory() ) + "]"			);		}		// todo : cache this sql...		String versionIncrementString = generateVersionIncrementUpdateString();		PreparedStatement st = null;		try {			try {				st = session.getBatcher().prepareStatement( versionIncrementString );				getVersionType().nullSafeSet( st, nextVersion, 1, session );				getIdentifierType().nullSafeSet( st, id, 2, session );				getVersionType().nullSafeSet( st, currentVersion, 2 + getIdentifierColumnSpan(), session );				int rows = st.executeUpdate();				if ( rows != 1 ) {					throw new StaleObjectStateException( getEntityName(), id );				}			}			finally {				session.getBatcher().closeStatement( st );			}		}		catch ( SQLException sqle ) {			throw JDBCExceptionHelper.convert(					getFactory().getSQLExceptionConverter(),					sqle,					"could not retrieve version: " +					MessageHelper.infoString( this, id, getFactory() ),					getVersionSelectString()				);		}		return nextVersion;	}	private String generateVersionIncrementUpdateString() {		Update update = new Update( getFactory().getDialect() );		update.setTableName( getTableName( 0 ) );		if ( getFactory().getSettings().isCommentsEnabled() ) {			update.setComment( "forced version increment" );		}		update.addColumn( getVersionColumnName() );		update.setPrimaryKeyColumnNames( getIdentifierColumnNames() );		update.setVersionColumnName( getVersionColumnName() );		return update.toStatementString();	}	/**	 * Retrieve the version number	 */	public Object getCurrentVersion(Serializable id, SessionImplementor session) throws HibernateException {		if ( log.isTraceEnabled() ) {			log.trace( "Getting version: " + MessageHelper.infoString( this, id, getFactory() ) );		}		try {			PreparedStatement st = session.getBatcher().prepareSelectStatement( getVersionSelectString() );			try {				getIdentifierType().nullSafeSet( st, id, 1, session );				ResultSet rs = st.executeQuery();				try {					if ( !rs.next() ) {						return null;					}					if ( !isVersioned() ) {						return this;					}					return getVersionType().nullSafeGet( rs, getVersionColumnName(), session, null );				}				finally {					rs.close();				}			}			finally {				session.getBatcher().closeStatement( st );			}		}		catch ( SQLException sqle ) {			throw JDBCExceptionHelper.convert(					getFactory().getSQLExceptionConverter(),					sqle,					"could not retrieve version: " +					MessageHelper.infoString( this, id, getFactory() ),					getVersionSelectString()				);		}	}	protected void initLockers() {		lockers.put( LockMode.READ, generateLocker( LockMode.READ ) );		lockers.put( LockMode.UPGRADE, generateLocker( LockMode.UPGRADE ) );		lockers.put( LockMode.UPGRADE_NOWAIT, generateLocker( LockMode.UPGRADE_NOWAIT ) );		lockers.put( LockMode.FORCE, generateLocker( LockMode.FORCE ) );	}	protected LockingStrategy generateLocker(LockMode lockMode) {		return factory.getDialect().getLockingStrategy( this, lockMode );	}	private LockingStrategy getLocker(LockMode lockMode) {		return ( LockingStrategy ) lockers.get( lockMode );	}	public void lock(			Serializable id,	        Object version,	        Object object,	        LockMode lockMode,	        SessionImplementor session) throws HibernateException {		getLocker( lockMode ).lock( id, version, object, session );	}	public String getRootTableName() {		return getSubclassTableName( 0 );	}	public String getRootTableAlias(String drivingAlias) {		return drivingAlias;	}	public String[] getRootTableIdentifierColumnNames() {		return getRootTableKeyColumnNames();	}	public String[] toColumns(String alias, String propertyName) throws QueryException {		return propertyMapping.toColumns( alias, propertyName );	}	public String[] toColumns(String propertyName) throws QueryException {		return propertyMapping.getColumnNames( propertyName );	}	public Type toType(String propertyName) throws QueryException {		return propertyMapping.toType( propertyName );	}	public String[] getPropertyColumnNames(String propertyName) {		return propertyMapping.getColumnNames( propertyName );	}	/**	 * Warning:	 * When there are duplicated property names in the subclasses	 * of the class, this method may return the wrong table	 * number for the duplicated subclass property (note that	 * SingleTableEntityPersister defines an overloaded form	 * which takes the entity name.	 */	public int getSubclassPropertyTableNumber(String propertyPath) {		String rootPropertyName = StringHelper.root(propertyPath);		Type type = propertyMapping.toType(rootPropertyName);		if ( type.isAssociationType() ) {			AssociationType assocType = ( AssociationType ) type;			if ( assocType.useLHSPrimaryKey() ) {				// performance op to avoid the array search				return 0;			}			else if ( type.isCollectionType() ) {				// properly handle property-ref-based associations				rootPropertyName = assocType.getLHSPropertyName();			}		}		//Enable for HHH-440, which we don't like:		/*if ( type.isComponentType() && !propertyName.equals(rootPropertyName) ) {			String unrooted = StringHelper.unroot(propertyName);			int idx = ArrayHelper.indexOf( getSubclassColumnClosure(), unrooted );			if ( idx != -1 ) {				return getSubclassColumnTableNumberClosure()[idx];			}		}*/		int index = ArrayHelper.indexOf( getSubclassPropertyNameClosure(), rootPropertyName); //TODO: optimize this better!		return index==-1 ? 0 : getSubclassPropertyTableNumber(index);	}	public Declarer getSubclassPropertyDeclarer(String propertyPath) {		int tableIndex = getSubclassPropertyTableNumber( propertyPath );		if ( tableIndex == 0 ) {			return Declarer.CLASS;		}		else if ( isClassOrSuperclassTable( tableIndex ) ) {			return Declarer.SUPERCLASS;		}		else {			return Declarer.SUBCLASS;		}	}	protected String generateTableAlias(String rootAlias, int tableNumber) {		if ( tableNumber == 0 ) {			return rootAlias;		}		StringBuffer buf = new StringBuffer().append( rootAlias );		if ( !rootAlias.endsWith( "_" ) ) {			buf.append( '_' );		}		return buf.append( tableNumber ).append( '_' ).toString();	}	public String[] toColumns(String name, final int i) {		final String alias = generateTableAlias( name, getSubclassPropertyTableNumber( i ) );		String[] cols = getSubclassPropertyColumnNames( i );		String[] templates = getSubclassPropertyFormulaTemplateClosure()[i];		String[] result = new String[cols.length];		for ( int j = 0; j < cols.length; j++ ) {			if ( cols[j] == null ) {				result[j] = StringHelper.replace( templates[j], Template.TEMPLATE, alias );			}			else {				result[j] = StringHelper.qualify( alias, cols[j] );			}		}		return result;	}	private int getSubclassPropertyIndex(String propertyName) {		return ArrayHelper.indexOf(subclassPropertyNameClosure, propertyName);	}	protected String[] getPropertySubclassNames() {		return propertySubclassNames;	}	public String[] getPropertyColumnNames(int i) {		return propertyColumnNames[i];	}	protected int getPropertyColumnSpan(int i) {		return propertyColumnSpans[i];	}	protected boolean hasFormulaProperties() {		return hasFormulaProperties;	}	public FetchMode getFetchMode(int i) {		return subclassPropertyFetchModeClosure[i];	}	public CascadeStyle getCascadeStyle(int i) {		return subclassPropertyCascadeStyleClosure[i];	}	public Type getSubclassPropertyType(int i) {		return subclassPropertyTypeClosure[i];	}	public String getSubclassPropertyName(int i) {		return subclassPropertyNameClosure[i];	}	public int countSubclassProperties() {		return subclassPropertyTypeClosure.length;	}	public String[] getSubclassPropertyColumnNames(int i) {		return subclassPropertyColumnNameClosure[i];	}	public boolean isDefinedOnSubclass(int i) {		return propertyDefinedOnSubclass[i];	}	protected String[][] getSubclassPropertyFormulaTemplateClosure() {		return subclassPropertyFormulaTemplateClosure;	}	protected Type[] getSubclassPropertyTypeClosure() {		return subclassPropertyTypeClosure;	}	protected String[][] getSubclassPropertyColumnNameClosure() {		return subclassPropertyColumnNameClosure;	}	protected String[] getSubclassPropertyNameClosure() {		return subclassPropertyNameClosure;	}	protected String[] getSubclassPropertySubclassNameClosure() {		return subclassPropertySubclassNameClosure;	}	protected String[] getSubclassColumnClosure() {		return subclassColumnClosure;	}	protected String[] getSubclassColumnAliasClosure() {		return subclassColumnAliasClosure;	}	protected String[] getSubclassFormulaClosure() {		return subclassFormulaClosure;

⌨️ 快捷键说明

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