📄 typefactory.java
字号:
// $Id: TypeFactory.java 11496 2007-05-09 03:54:06Z steve.ebersole@jboss.com $package org.hibernate.type;import java.io.Serializable;import java.math.BigDecimal;import java.math.BigInteger;import java.sql.Blob;import java.sql.Clob;import java.sql.Time;import java.sql.Timestamp;import java.util.Calendar;import java.util.Collections;import java.util.Comparator;import java.util.GregorianCalendar;import java.util.HashMap;import java.util.Locale;import java.util.Map;import java.util.Properties;import java.util.TimeZone;import org.hibernate.Hibernate;import org.hibernate.MappingException;import org.hibernate.classic.Lifecycle;import org.hibernate.engine.SessionImplementor;import org.hibernate.intercept.LazyPropertyInitializer;import org.hibernate.property.BackrefPropertyAccessor;import org.hibernate.tuple.StandardProperty;import org.hibernate.usertype.CompositeUserType;import org.hibernate.usertype.UserType;import org.hibernate.usertype.ParameterizedType;import org.hibernate.util.ReflectHelper;/** * Used internally to obtain instances of <tt>Type</tt>. Applications should use static methods * and constants on <tt>org.hibernate.Hibernate</tt>. * * @see org.hibernate.Hibernate * @author Gavin King */public final class TypeFactory { private static final Map BASIC_TYPES; static { HashMap basics = new HashMap(); basics.put( boolean.class.getName(), Hibernate.BOOLEAN ); basics.put( long.class.getName(), Hibernate.LONG ); basics.put( short.class.getName(), Hibernate.SHORT ); basics.put( int.class.getName(), Hibernate.INTEGER ); basics.put( byte.class.getName(), Hibernate.BYTE ); basics.put( float.class.getName(), Hibernate.FLOAT ); basics.put( double.class.getName(), Hibernate.DOUBLE ); basics.put( char.class.getName(), Hibernate.CHARACTER ); basics.put( Hibernate.CHARACTER.getName(), Hibernate.CHARACTER ); basics.put( Hibernate.INTEGER.getName(), Hibernate.INTEGER ); basics.put( Hibernate.STRING.getName(), Hibernate.STRING ); basics.put( Hibernate.DATE.getName(), Hibernate.DATE ); basics.put( Hibernate.TIME.getName(), Hibernate.TIME ); basics.put( Hibernate.TIMESTAMP.getName(), Hibernate.TIMESTAMP ); basics.put( "dbtimestamp", new DbTimestampType() ); basics.put( Hibernate.LOCALE.getName(), Hibernate.LOCALE ); basics.put( Hibernate.CALENDAR.getName(), Hibernate.CALENDAR ); basics.put( Hibernate.CALENDAR_DATE.getName(), Hibernate.CALENDAR_DATE ); basics.put( Hibernate.CURRENCY.getName(), Hibernate.CURRENCY ); basics.put( Hibernate.TIMEZONE.getName(), Hibernate.TIMEZONE ); basics.put( Hibernate.CLASS.getName(), Hibernate.CLASS ); basics.put( Hibernate.TRUE_FALSE.getName(), Hibernate.TRUE_FALSE ); basics.put( Hibernate.YES_NO.getName(), Hibernate.YES_NO ); basics.put( Hibernate.BINARY.getName(), Hibernate.BINARY ); basics.put( Hibernate.TEXT.getName(), Hibernate.TEXT ); basics.put( Hibernate.BLOB.getName(), Hibernate.BLOB ); basics.put( Hibernate.CLOB.getName(), Hibernate.CLOB ); basics.put( Hibernate.BIG_DECIMAL.getName(), Hibernate.BIG_DECIMAL ); basics.put( Hibernate.BIG_INTEGER.getName(), Hibernate.BIG_INTEGER ); basics.put( Hibernate.SERIALIZABLE.getName(), Hibernate.SERIALIZABLE ); basics.put( Hibernate.OBJECT.getName(), Hibernate.OBJECT ); basics.put( Boolean.class.getName(), Hibernate.BOOLEAN ); basics.put( Long.class.getName(), Hibernate.LONG ); basics.put( Short.class.getName(), Hibernate.SHORT ); basics.put( Integer.class.getName(), Hibernate.INTEGER ); basics.put( Byte.class.getName(), Hibernate.BYTE ); basics.put( Float.class.getName(), Hibernate.FLOAT ); basics.put( Double.class.getName(), Hibernate.DOUBLE ); basics.put( Character.class.getName(), Hibernate.CHARACTER ); basics.put( String.class.getName(), Hibernate.STRING ); basics.put( java.util.Date.class.getName(), Hibernate.TIMESTAMP ); basics.put( Time.class.getName(), Hibernate.TIME ); basics.put( Timestamp.class.getName(), Hibernate.TIMESTAMP ); basics.put( java.sql.Date.class.getName(), Hibernate.DATE ); basics.put( BigDecimal.class.getName(), Hibernate.BIG_DECIMAL ); basics.put( BigInteger.class.getName(), Hibernate.BIG_INTEGER ); basics.put( Locale.class.getName(), Hibernate.LOCALE ); basics.put( Calendar.class.getName(), Hibernate.CALENDAR ); basics.put( GregorianCalendar.class.getName(), Hibernate.CALENDAR ); if ( CurrencyType.CURRENCY_CLASS != null ) { basics.put( CurrencyType.CURRENCY_CLASS.getName(), Hibernate.CURRENCY ); } basics.put( TimeZone.class.getName(), Hibernate.TIMEZONE ); basics.put( Object.class.getName(), Hibernate.OBJECT ); basics.put( Class.class.getName(), Hibernate.CLASS ); basics.put( byte[].class.getName(), Hibernate.BINARY ); basics.put( "byte[]", Hibernate.BINARY ); basics.put( Byte[].class.getName(), Hibernate.WRAPPER_BINARY ); basics.put( "Byte[]", Hibernate.WRAPPER_BINARY ); basics.put( char[].class.getName(), Hibernate.CHAR_ARRAY ); basics.put( "char[]", Hibernate.CHAR_ARRAY ); basics.put( Character[].class.getName(), Hibernate.CHARACTER_ARRAY ); basics.put( "Character[]", Hibernate.CHARACTER_ARRAY ); basics.put( Blob.class.getName(), Hibernate.BLOB ); basics.put( Clob.class.getName(), Hibernate.CLOB ); basics.put( Serializable.class.getName(), Hibernate.SERIALIZABLE ); Type type = new AdaptedImmutableType(Hibernate.DATE); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.TIME); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.TIMESTAMP); basics.put( type.getName(), type ); type = new AdaptedImmutableType( new DbTimestampType() ); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.CALENDAR); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.CALENDAR_DATE); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.SERIALIZABLE); basics.put( type.getName(), type ); type = new AdaptedImmutableType(Hibernate.BINARY); basics.put( type.getName(), type ); BASIC_TYPES = Collections.unmodifiableMap( basics ); } private TypeFactory() { throw new UnsupportedOperationException(); } /** * A one-to-one association type for the given class */ public static EntityType oneToOne( String persistentClass, ForeignKeyDirection foreignKeyType, String uniqueKeyPropertyName, boolean lazy, boolean unwrapProxy, boolean isEmbeddedInXML, String entityName, String propertyName ) { return new OneToOneType( persistentClass, foreignKeyType, uniqueKeyPropertyName, lazy, unwrapProxy, isEmbeddedInXML, entityName, propertyName ); } /** * A many-to-one association type for the given class */ public static EntityType manyToOne(String persistentClass) { return new ManyToOneType( persistentClass ); } /** * A many-to-one association type for the given class */ public static EntityType manyToOne(String persistentClass, boolean lazy) { return new ManyToOneType( persistentClass, lazy ); } /** * A many-to-one association type for the given class */ public static EntityType manyToOne( String persistentClass, String uniqueKeyPropertyName, boolean lazy, boolean unwrapProxy, boolean isEmbeddedInXML, boolean ignoreNotFound ) { return new ManyToOneType( persistentClass, uniqueKeyPropertyName, lazy, unwrapProxy, isEmbeddedInXML, ignoreNotFound ); } /** * Given the name of a Hibernate basic type, return an instance of * <tt>org.hibernate.type.Type</tt>. */ public static Type basic(String name) { return (Type) BASIC_TYPES.get( name ); } /** * Uses heuristics to deduce a Hibernate type given a string naming the type or Java class. * Return an instance of <tt>org.hibernate.type.Type</tt>. */ public static Type heuristicType(String typeName) throws MappingException { return heuristicType( typeName, null ); } /** * Uses heuristics to deduce a Hibernate type given a string naming the type or Java class. * Return an instance of <tt>org.hibernate.type.Type</tt>. */ public static Type heuristicType(String typeName, Properties parameters) throws MappingException { Type type = TypeFactory.basic( typeName ); if ( type == null ) { Class typeClass; try { typeClass = ReflectHelper.classForName( typeName ); } catch (ClassNotFoundException cnfe) { typeClass = null; } if ( typeClass != null ) { if ( Type.class.isAssignableFrom( typeClass ) ) { try { type = (Type) typeClass.newInstance(); } catch (Exception e) { throw new MappingException( "Could not instantiate Type: " + typeClass.getName(), e ); } injectParameters(type, parameters); } else if ( CompositeUserType.class.isAssignableFrom( typeClass ) ) { type = new CompositeCustomType( typeClass, parameters ); } else if ( UserType.class.isAssignableFrom( typeClass ) ) { type = new CustomType( typeClass, parameters ); } else if ( Lifecycle.class.isAssignableFrom( typeClass ) ) { type = Hibernate.entity( typeClass ); } else if ( Serializable.class.isAssignableFrom( typeClass ) ) { type = Hibernate.serializable( typeClass ); } } } return type; } /** * The legacy contract. * * @deprecated Use {@link #customCollection(String, java.util.Properties, String, String, boolean)} instead */ public static CollectionType customCollection( String typeName, String role, String propertyRef, boolean embedded) { return customCollection( typeName, null, role, propertyRef, embedded ); } public static CollectionType customCollection( String typeName, Properties typeParameters, String role, String propertyRef, boolean embedded) { Class typeClass; try { typeClass = ReflectHelper.classForName( typeName ); } catch ( ClassNotFoundException cnfe ) { throw new MappingException( "user collection type class not found: " + typeName, cnfe ); } CustomCollectionType result = new CustomCollectionType( typeClass, role, propertyRef, embedded ); if ( typeParameters != null ) { TypeFactory.injectParameters( result.getUserType(), typeParameters ); } return result; } // Collection Types: public static CollectionType array(String role, String propertyRef, boolean embedded, Class elementClass) { return new ArrayType( role, propertyRef, elementClass, embedded ); } public static CollectionType list(String role, String propertyRef, boolean embedded) { return new ListType( role, propertyRef, embedded ); } public static CollectionType bag(String role, String propertyRef, boolean embedded) { return new BagType( role, propertyRef, embedded ); } public static CollectionType idbag(String role, String propertyRef, boolean embedded) { return new IdentifierBagType( role, propertyRef, embedded ); } public static CollectionType map(String role, String propertyRef, boolean embedded) { return new MapType( role, propertyRef, embedded ); } public static CollectionType orderedMap(String role, String propertyRef, boolean embedded) { return new OrderedMapType( role, propertyRef, embedded ); } public static CollectionType set(String role, String propertyRef, boolean embedded) { return new SetType( role, propertyRef, embedded ); } public static CollectionType orderedSet(String role, String propertyRef, boolean embedded) { return new OrderedSetType( role, propertyRef, embedded ); } public static CollectionType sortedMap(String role, String propertyRef, boolean embedded, Comparator comparator) { return new SortedMapType( role, propertyRef, comparator, embedded ); } public static CollectionType sortedSet(String role, String propertyRef, boolean embedded, Comparator comparator) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -