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

📄 forupdatefragment.java

📁 hibernate-3.1.3-all-src.zip 面向对象的访问数据库工具
💻 JAVA
字号:
//$Id: ForUpdateFragment.java 6811 2005-05-17 10:36:35Z oneovthafew $
package org.hibernate.sql;

import java.util.Iterator;
import java.util.Map;

import org.hibernate.LockMode;
import org.hibernate.QueryException;
import org.hibernate.dialect.Dialect;
import org.hibernate.util.StringHelper;

/**
 * @author Gavin King
 */
public class ForUpdateFragment {
	private final StringBuffer aliases = new StringBuffer();
	private boolean isNowaitEnabled;
	private final Dialect dialect;
	
	public ForUpdateFragment(Dialect dialect) {
		this.dialect = dialect;
	}

	public ForUpdateFragment addTableAlias(String alias) {
		if ( aliases.length()>0 ) aliases.append(", ");
		aliases.append(alias);
		return this;
	}
	
	public String toFragmentString() {
		if ( aliases.length()==0 ) return "";
		return isNowaitEnabled ?
				dialect.getForUpdateNowaitString( aliases.toString() ) :
				dialect.getForUpdateString( aliases.toString() );
	}

	public ForUpdateFragment setNowaitEnabled(boolean nowait) {
		isNowaitEnabled = nowait;
		return this;
	}

	public ForUpdateFragment(Dialect dialect, Map lockModes, Map keyColumnNames) 
	throws QueryException {
		this(dialect);
		LockMode upgradeType = null;
		Iterator iter = lockModes.entrySet().iterator();
		while ( iter.hasNext() ) {
			final Map.Entry me = (Map.Entry) iter.next();
			final LockMode lockMode = (LockMode) me.getValue();
			if ( LockMode.READ.lessThan(lockMode) ) {
				final String tableAlias = (String) me.getKey();
				if ( dialect.forUpdateOfColumns() ) {
					String[] keyColumns = (String[]) keyColumnNames.get(tableAlias); //use the id column alias
					if (keyColumns==null) {
						throw new IllegalArgumentException("alias not found: " + tableAlias);
					}
					keyColumns = StringHelper.qualify(tableAlias, keyColumns);
					for (int i=0; i<keyColumns.length; i++) addTableAlias( keyColumns[i] );
				}
				else {
					addTableAlias(tableAlias);
				}
				if ( upgradeType!=null && lockMode!=upgradeType ) {
					throw new QueryException("mixed LockModes");
				}
				upgradeType = lockMode;
			}
		}

		if ( upgradeType==LockMode.UPGRADE_NOWAIT ) setNowaitEnabled(true);
	}
}

⌨️ 快捷键说明

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