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

📄 table.java

📁 用Java实现的23个常用设计模式源代码
💻 JAVA
字号:
//$Id: Table.java,v 1.13.2.9 2003/11/06 13:43:22 oneovthafew Exp $package net.sf.hibernate.mapping;import java.util.ArrayList;import java.util.Iterator;import java.util.List;import java.util.Map;import java.util.HashMap;import net.sf.hibernate.engine.Mapping;import net.sf.hibernate.id.IdentityGenerator;import net.sf.hibernate.dialect.Dialect;import net.sf.hibernate.dialect.HSQLDialect;import net.sf.hibernate.HibernateException;import net.sf.hibernate.tool.hbm2ddl.ColumnMetadata;import net.sf.hibernate.tool.hbm2ddl.TableMetadata;import net.sf.hibernate.util.StringHelper;import org.apache.commons.collections.SequencedHashMap;/** * A relational table * @author Gavin King */public class Table implements RelationalModel {		private String name;	private String schema;	private Map columns = new SequencedHashMap();	private SimpleValue idValue;	private PrimaryKey primaryKey;	private Map indexes = new HashMap();	private Map foreignKeys = new HashMap();	private Map uniqueKeys = new HashMap();	private final int uniqueInteger;	private boolean quoted;	private static int tableCounter=0;		public Table() {		uniqueInteger = tableCounter++;	}		public String getQualifiedName(Dialect dialect) {		String quotedName = getQuotedName(dialect);		return schema==null ? quotedName : schema + dialect.getSchemaSeperator() + quotedName;	}		public String getQualifiedName(Dialect dialect, String defaultQualifier) {		String quotedName = getQuotedName(dialect);		return schema==null ? 			( defaultQualifier==null ? quotedName : defaultQualifier + dialect.getSchemaSeperator() + quotedName ) : 			getQualifiedName(dialect);	}		public String getName() {		return name;	}	public String getQuotedName(Dialect dialect) {		return quoted ?			dialect.openQuote() + name + dialect.closeQuote() :			name;	}	public void setName(String name) {		if ( name.charAt(0)=='`' ) {			quoted=true;			this.name=name.substring( 1, name.length()-1 );		}		else {			this.name = name;		}	}		public Column getColumn(int n) {		Iterator iter = columns.values().iterator();		for (int i=0; i<n-1; i++) iter.next();		return (Column) iter.next();	}	public void addColumn(Column column) {		Column old = (Column) columns.get( column.getName() );		if ( old==null ) {			columns.put( column.getName(), column );			column.uniqueInteger = columns.size();		}		else {			column.uniqueInteger = old.uniqueInteger;		}	}	public int getColumnSpan() {		return columns.size();	}	public Iterator getColumnIterator() {		return columns.values().iterator();	}	public Iterator getIndexIterator() {		return indexes.values().iterator();	}	public Iterator getForeignKeyIterator() {		return foreignKeys.values().iterator();	}	public Iterator getUniqueKeyIterator() {		return uniqueKeys.values().iterator();	}		public Iterator sqlAlterStrings(Dialect dialect, Mapping p, TableMetadata tableInfo) throws HibernateException {				StringBuffer root = new StringBuffer("alter table ")			.append( getQualifiedName(dialect) )			.append(' ')			.append( dialect.getAddColumnString() );				Iterator iter=getColumnIterator();		List results = new ArrayList();		while ( iter.hasNext() ) {			Column col = (Column) iter.next();						ColumnMetadata columnInfo=tableInfo.getColumnMetadata( col.getName() );						if (columnInfo==null) {				// the column doesnt exist at all.				StringBuffer alter = new StringBuffer( root.toString() )					.append(' ')					.append( col.getQuotedName(dialect) )					.append(' ')					.append( col.getSqlType(dialect, p) );				if ( col.isUnique() && dialect.supportsUnique() ) {					alter.append(" unique");				}				results.add( alter.toString() );			}					}				return results.iterator();	}		public String sqlCreateString(Dialect dialect, Mapping p) throws HibernateException {		StringBuffer buf = new StringBuffer("create table ")			.append( getQualifiedName(dialect) )			.append(" (");				boolean identityColumn = idValue!=null && idValue.createIdentifierGenerator(dialect) instanceof IdentityGenerator;				// Try to find out the name of the primary key to create it as identity if the IdentityGenerator is used		String pkname = null;		if (primaryKey != null && identityColumn ) {			pkname = ( (Column) primaryKey.getColumnIterator().next() ).getQuotedName(dialect);		}				Iterator iter = getColumnIterator();		while ( iter.hasNext() ) {			Column col = (Column) iter.next();						buf.append( col.getQuotedName(dialect) )				.append(' ')				.append( col.getSqlType(dialect, p) );						if ( identityColumn && col.getQuotedName(dialect).equals(pkname) ) {				buf.append(' ').append( dialect.getIdentityColumnString() );			}			else {				if ( col.isNullable() ) {					buf.append( dialect.getNullColumnString() );				}				else {					buf.append(" not null" );				}			}						if ( col.isUnique() ) {				if ( dialect.supportsUnique() ) {					buf.append(" unique");				}				else {					UniqueKey uk = getUniqueKey( col.getQuotedName(dialect) + '_' );					uk.addColumn(col);				}			}			if ( iter.hasNext() ) buf.append(StringHelper.COMMA_SPACE);					}		if (primaryKey!=null) {			if ( dialect instanceof HSQLDialect && identityColumn ) {				// skip the primary key definition				// ugly, ugly hack!			}			else {				buf.append(',').append( primaryKey.sqlConstraintString(dialect) );			}		}				Iterator ukiter = getUniqueKeyIterator();		while ( ukiter.hasNext() ) {			UniqueKey uk = (UniqueKey) ukiter.next();			buf.append(',').append( uk.sqlConstraintString(dialect) );		}				buf.append(StringHelper.CLOSE_PAREN);				return buf.toString();	}	public String sqlDropString(Dialect dialect) {		StringBuffer buf = new StringBuffer("drop table ");		if ( dialect.supportsIfExistsBeforeTableName() ) buf.append("if exists ");		buf.append( getQualifiedName(dialect) )			.append( dialect.getCascadeConstraintsString() );		if ( dialect.supportsIfExistsAfterTableName() ) buf.append(" if exists");		return buf.toString();	}		public PrimaryKey getPrimaryKey() {		return primaryKey;	}		public void setPrimaryKey(PrimaryKey primaryKey) {		this.primaryKey = primaryKey;	}		public void createIndex(Iterator indexColumns, boolean isForeignKey) {		List list = new ArrayList();		while ( indexColumns.hasNext() ) list.add( indexColumns.next() );		Index idx = getIndex( "IX" + uniqueColumnString( list.iterator() ) );		idx.addColumns( list.iterator() );		idx.setForeignKey(true);	}		public Index getIndex(String indexName) {		Index index = (Index)indexes.get(indexName);				if (index == null) {			index = new Index();			index.setName(indexName);			index.setTable(this);			indexes.put(indexName, index);		}				return index;	}		public UniqueKey getUniqueKey(String keyName) {				UniqueKey uk = (UniqueKey) uniqueKeys.get(keyName);				if (uk == null) {			uk = new UniqueKey();			uk.setName(keyName);			uk.setTable(this);			uniqueKeys.put(keyName, uk);		}		return uk;	}		public ForeignKey createForeignKey(String keyName, List keyColumns, Class referencedClass) {				if (keyName==null) keyName = "FK" + uniqueColumnString( keyColumns.iterator() );		ForeignKey fk = (ForeignKey) foreignKeys.get(keyName);				if (fk == null) {			fk = new ForeignKey();			fk.setName(keyName);			fk.setTable(this);			foreignKeys.put(keyName, fk);			fk.setReferencedClass(referencedClass);		}		else {			keyName += Integer.toHexString( referencedClass.getName().hashCode() ).toUpperCase();			if ( fk.getReferencedClass()!=referencedClass ) fk = createForeignKey(keyName, keyColumns, referencedClass);		}		Iterator iter = keyColumns.iterator();		while ( iter.hasNext() ) fk.addColumn( (Column) iter.next() );		return fk;	}		public String uniqueColumnString(Iterator iterator) {		int result = 0;		while ( iterator.hasNext() ) result += iterator.next().hashCode();		return ( Integer.toHexString( name.hashCode() ) + Integer.toHexString(result) ).toUpperCase();	}			public String getSchema() {		return schema;	}		public void setSchema(String schema) {		this.schema = schema;	}		public int getUniqueInteger() {		return uniqueInteger;	}		public void setIdentifierValue(SimpleValue idValue) {		this.idValue = idValue;	}		public boolean isQuoted() {		return quoted;	}	public void setQuoted(boolean quoted) {		this.quoted = quoted;	}}

⌨️ 快捷键说明

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