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

📄 forupdatefragment.java

📁 用Java实现的23个常用设计模式源代码
💻 JAVA
字号:
//$Id: ForUpdateFragment.java,v 1.1.2.2 2003/11/27 15:28:38 oneovthafew Exp $
package net.sf.hibernate.sql;

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

import net.sf.hibernate.LockMode;
import net.sf.hibernate.QueryException;
import net.sf.hibernate.dialect.Dialect;
import net.sf.hibernate.util.StringHelper;

/**
 * @author Gavin King
 */
public class ForUpdateFragment {
	private StringBuffer aliases = new StringBuffer();
	private boolean isNowaitEnabled;
	public ForUpdateFragment addTableAlias(String alias) {
		if ( aliases.length()>0 ) aliases.append(", ");
		aliases.append(alias);
		return this;
	}
	public String toFragmentString(Dialect dialect) {
		if ( aliases.length()==0 ) return StringHelper.EMPTY_STRING;
		boolean nowait = isNowaitEnabled && dialect.supportsForUpdateNowait();
		if ( dialect.supportsForUpdateOf() ) {
			return " for update of " + aliases + ( nowait ? " nowait" : StringHelper.EMPTY_STRING );
		}
		else if ( dialect.supportsForUpdate() ) {
			return " for update" + ( nowait ? " nowait" : StringHelper.EMPTY_STRING );
		}
		else {
			return StringHelper.EMPTY_STRING;
		}
	}
	
	public ForUpdateFragment setNowaitEnabled(boolean nowait) {
		isNowaitEnabled = nowait;
		return this;
	}
	
	public ForUpdateFragment() {}
	
	public ForUpdateFragment(Map lockModes) throws QueryException {
		LockMode upgradeType = null;
		Iterator iter = lockModes.entrySet().iterator();
		while ( iter.hasNext() ) {
			Map.Entry me = (Map.Entry) iter.next();
			LockMode lockMode = (LockMode) me.getValue();
			if ( LockMode.READ.lessThan(lockMode) ) {
				addTableAlias( (String) me.getKey() );
				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 + -