📄 column.java
字号:
//$Id: Column.java 9908 2006-05-08 20:59:20Z max.andersen@jboss.com $package org.hibernate.mapping;import java.io.Serializable;import org.hibernate.HibernateException;import org.hibernate.MappingException;import org.hibernate.dialect.Dialect;import org.hibernate.dialect.function.SQLFunctionRegistry;import org.hibernate.engine.Mapping;import org.hibernate.util.StringHelper;/** * A column of a relational database table * @author Gavin King */public class Column implements Selectable, Serializable, Cloneable { public static final int DEFAULT_LENGTH = 255; public static final int DEFAULT_PRECISION = 19; public static final int DEFAULT_SCALE = 2; private int length=DEFAULT_LENGTH; private int precision=DEFAULT_PRECISION; private int scale=DEFAULT_SCALE; private Value value; private int typeIndex = 0; private String name; private boolean nullable=true; private boolean unique=false; private String sqlType; private Integer sqlTypeCode; private boolean quoted=false; int uniqueInteger; private String checkConstraint; private String comment; private String defaultValue; public Column() { }; public Column(String columnName) { setName(columnName); } public int getLength() { return length; } public void setLength(int length) { this.length = length; } public Value getValue() { return value; } public void setValue(Value value) { this.value= value; } public String getName() { return name; } public void setName(String name) { if ( name.charAt(0)=='`' || Dialect.QUOTE.indexOf( name.charAt(0) ) > -1 //TODO: deprecated, remove eventually ) { quoted=true; this.name=name.substring( 1, name.length()-1 ); } else { this.name = name; } } /** returns quoted name as it would be in the mapping file. */ public String getQuotedName() { return quoted ? "`" + name + "`" : name; } public String getQuotedName(Dialect d) { return quoted ? d.openQuote() + name + d.closeQuote() : name; } /** * For any column name, generate an alias that is unique * to that column name, and also 10 characters or less * in length. */ public String getAlias(Dialect dialect) { String alias = name; String unique = Integer.toString(uniqueInteger) + '_'; int lastLetter = StringHelper.lastIndexOfLetter(name); if ( lastLetter == -1 ) { alias = "column"; } else if ( lastLetter < name.length()-1 ) { alias = name.substring(0, lastLetter+1); } if ( alias.length() > dialect.getMaxAliasLength() ) { alias = alias.substring( 0, dialect.getMaxAliasLength() - unique.length() ); } boolean useRawName = name.equals(alias) && !quoted && !name.toLowerCase().equals("rowid"); if ( useRawName ) { return alias; } else { return alias + unique; } } /** * Generate a column alias that is unique across multiple tables */ public String getAlias(Dialect dialect, Table table) { return getAlias(dialect) + table.getUniqueInteger() + '_'; } public boolean isNullable() { return nullable; } public void setNullable(boolean nullable) { this.nullable=nullable; } public int getTypeIndex() { return typeIndex; } public void setTypeIndex(int typeIndex) { this.typeIndex = typeIndex; } public int getSqlTypeCode(Mapping mapping) throws MappingException { org.hibernate.type.Type type = getValue().getType(); try { int sqlTypeCode = type.sqlTypes(mapping)[ getTypeIndex() ]; if(getSqlTypeCode()!=null && getSqlTypeCode().intValue()!=sqlTypeCode) { throw new MappingException("SQLType code's does not match. mapped as " + sqlTypeCode + " but is " + getSqlTypeCode() ); } return sqlTypeCode; } catch (Exception e) { throw new MappingException( "Could not determine type for column " + name + " of type " + type.getClass().getName() + ": " + e.getClass().getName(), e ); } } /** * Returns the underlying columns sqltypecode. * If null, it is because the sqltype code is unknown. * * Use #getSqlTypeCode(Mapping) to retreive the sqltypecode used * for the columns associated Value/Type. * * @return sqltypecode if it is set, otherwise null. */ public Integer getSqlTypeCode() { return sqlTypeCode; } public void setSqlTypeCode(Integer typecode) { sqlTypeCode=typecode; } public boolean isUnique() { return unique; } public String getSqlType(Dialect dialect, Mapping mapping) throws HibernateException { return sqlType==null ? dialect.getTypeName( getSqlTypeCode(mapping), getLength(), getPrecision(), getScale() ) : sqlType; } public boolean equals(Object object) { return object instanceof Column && equals( (Column) object ); } public boolean equals(Column column) { if (null == column) return false; if (this == column) return true; return isQuoted() ? name.equals(column.name) : name.equalsIgnoreCase(column.name); } //used also for generation of FK names! public int hashCode() { return isQuoted() ? name.hashCode() : name.toLowerCase().hashCode(); } public String getSqlType() { return sqlType; } public void setSqlType(String sqlType) { this.sqlType = sqlType; } public void setUnique(boolean unique) { this.unique = unique; } public boolean isQuoted() { return quoted; } public String toString() { return getClass().getName() + '(' + getName() + ')'; } public String getCheckConstraint() { return checkConstraint; } public void setCheckConstraint(String checkConstraint) { this.checkConstraint = checkConstraint; } public boolean hasCheckConstraint() { return checkConstraint!=null; } public String getTemplate(Dialect dialect, SQLFunctionRegistry functionRegistry) { return getQuotedName(dialect); } public boolean isFormula() { return false; } public String getText(Dialect d) { return getQuotedName(d); } public String getText() { return getName(); } public int getPrecision() { return precision; } public void setPrecision(int scale) { this.precision = scale; } public int getScale() { return scale; } public void setScale(int scale) { this.scale = scale; } public String getComment() { return comment; } public void setComment(String comment) { this.comment = comment; } public String getDefaultValue() { return defaultValue; } public void setDefaultValue(String defaultValue) { this.defaultValue = defaultValue; } public String getCanonicalName() { return quoted ? name : name.toLowerCase(); } /** * Shallow copy, the value is not copied */ protected Object clone() { Column copy = new Column(); copy.setLength( length ); copy.setScale( scale ); copy.setValue( value ); copy.setTypeIndex( typeIndex ); copy.setName( getQuotedName() ); copy.setNullable( nullable ); copy.setPrecision( precision ); copy.setUnique( unique ); copy.setSqlType( sqlType ); copy.setSqlTypeCode( sqlTypeCode ); copy.uniqueInteger = uniqueInteger; //usually useless copy.setCheckConstraint( checkConstraint ); copy.setComment( comment ); copy.setDefaultValue( defaultValue ); return copy; }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -