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

📄 distinctrootentityresulttransformer.java

📁 hibernate-3.1.3-all-src.zip 面向对象的访问数据库工具
💻 JAVA
字号:
//$Id: DistinctRootEntityResultTransformer.java 3890 2004-06-03 16:31:32Z steveebersole $
package org.hibernate.transform;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * @author Gavin King
 */
public class DistinctRootEntityResultTransformer implements ResultTransformer {

	private static final Log log = LogFactory.getLog(DistinctRootEntityResultTransformer.class);

	static final class Identity {
		final Object entity;
		Identity(Object entity) {
			this.entity = entity;
		}
		public boolean equals(Object other) {
			Identity that = (Identity) other;
			return entity==that.entity;
		}
		public int hashCode() {
			return System.identityHashCode(entity);
		}
	}

	public Object transformTuple(Object[] tuple, String[] aliases) {
		return tuple[ tuple.length-1 ];
	}

	public List transformList(List list) {
		List result = new ArrayList( list.size() );
		Set distinct = new HashSet();
		for ( int i=0; i<list.size(); i++ ) {
			Object entity = list.get(i);
			if ( distinct.add( new Identity(entity) ) ) {
				result.add(entity);
			}
		}
		if ( log.isDebugEnabled() ) log.debug(
			"transformed: " +
			list.size() + " rows to: " +
			result.size() + " distinct results"
		);
		return result;
	}

}

⌨️ 快捷键说明

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