下面列出了org.hibernate.type.BinaryType#org.hibernate.usertype.DynamicParameterizedType 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
@Override
public void setParameterValues(Properties parameters) {
DynamicParameterizedType.ParameterType parameterType = (ParameterType) parameters.get(DynamicParameterizedType.PARAMETER_TYPE);
Annotation[] annotations = parameterType.getAnnotationsMethod();
if (annotations != null) {
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (Type.class.isAssignableFrom(annotation.annotationType())) {
Type type = (Type) annotation;
name = type.type();
break;
}
}
}
if (name == null) {
name = String.format(DEFAULT_TYPE_NAME, parameters.getProperty(SQL_ARRAY_TYPE));
}
((AbstractArrayTypeDescriptor) getJavaTypeDescriptor()).setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
DynamicParameterizedType.ParameterType parameterType = (ParameterType) parameters.get(DynamicParameterizedType.PARAMETER_TYPE);
Annotation[] annotations = parameterType.getAnnotationsMethod();
if (annotations != null) {
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (Type.class.isAssignableFrom(annotation.annotationType())) {
Type type = (Type) annotation;
name = type.type();
break;
}
}
}
if (name == null) {
name = String.format(DEFAULT_TYPE_NAME, parameters.getProperty(SQL_ARRAY_TYPE));
}
((AbstractArrayTypeDescriptor) getJavaTypeDescriptor()).setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
DynamicParameterizedType.ParameterType parameterType = (ParameterType) parameters.get(DynamicParameterizedType.PARAMETER_TYPE);
Annotation[] annotations = parameterType.getAnnotationsMethod();
if (annotations != null) {
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (Type.class.isAssignableFrom(annotation.annotationType())) {
Type type = (Type) annotation;
name = type.type();
break;
}
}
}
if (name == null) {
name = String.format(DEFAULT_TYPE_NAME, parameters.getProperty(SQL_ARRAY_TYPE));
}
((AbstractArrayTypeDescriptor) getJavaTypeDescriptor()).setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
DynamicParameterizedType.ParameterType parameterType = (ParameterType) parameters.get(DynamicParameterizedType.PARAMETER_TYPE);
Annotation[] annotations = parameterType.getAnnotationsMethod();
if (annotations != null) {
for (int i = 0; i < annotations.length; i++) {
Annotation annotation = annotations[i];
if (Type.class.isAssignableFrom(annotation.annotationType())) {
Type type = (Type) annotation;
name = type.type();
break;
}
}
}
if (name == null) {
name = String.format(DEFAULT_TYPE_NAME, parameters.getProperty(SQL_ARRAY_TYPE));
}
((AbstractArrayTypeDescriptor) getJavaTypeDescriptor()).setParameterValues(parameters);
}
public Type getType() throws MappingException {
if ( type != null ) {
return type;
}
if ( typeName == null ) {
throw new MappingException( "No type name" );
}
if ( typeParameters != null
&& Boolean.valueOf( typeParameters.getProperty( DynamicParameterizedType.IS_DYNAMIC ) )
&& typeParameters.get( DynamicParameterizedType.PARAMETER_TYPE ) == null ) {
createParameterImpl();
}
Type result = getMetadata().getTypeConfiguration().getTypeResolver().heuristicType( typeName, typeParameters );
// if this is a byte[] version/timestamp, then we need to use RowVersionType
// instead of BinaryType (HHH-10413)
if ( isVersion && BinaryType.class.isInstance( result ) ) {
log.debug( "version is BinaryType; changing to RowVersionType" );
result = RowVersionType.INSTANCE;
}
if ( result == null ) {
String msg = "Could not determine type for: " + typeName;
if ( table != null ) {
msg += ", at table: " + table.getName();
}
if ( columns != null && columns.size() > 0 ) {
msg += ", for columns: " + columns;
}
throw new MappingException( msg );
}
return result;
}
private void createParameterImpl() {
try {
String[] columnsNames = new String[columns.size()];
for ( int i = 0; i < columns.size(); i++ ) {
Selectable column = columns.get(i);
if (column instanceof Column){
columnsNames[i] = ((Column) column).getName();
}
}
final XProperty xProperty = (XProperty) typeParameters.get( DynamicParameterizedType.XPROPERTY );
// todo : not sure this works for handling @MapKeyEnumerated
final Annotation[] annotations = xProperty == null
? null
: xProperty.getAnnotations();
final ClassLoaderService classLoaderService = getMetadata()
.getMetadataBuildingOptions()
.getServiceRegistry()
.getService( ClassLoaderService.class );
typeParameters.put(
DynamicParameterizedType.PARAMETER_TYPE,
new ParameterTypeImpl(
classLoaderService.classForName(
typeParameters.getProperty( DynamicParameterizedType.RETURNED_CLASS )
),
annotations,
table.getCatalog(),
table.getSchema(),
table.getName(),
Boolean.valueOf( typeParameters.getProperty( DynamicParameterizedType.IS_PRIMARY_KEY ) ),
columnsNames
)
);
}
catch ( ClassLoadingException e ) {
throw new MappingException( "Could not create DynamicParameterizedType for type: " + typeName, e );
}
}
@Override
public void setParameterValues(Properties parameters) {
Class entityClass = ReflectionUtils.getClass(parameters.getProperty(DynamicParameterizedType.ENTITY));
String property = parameters.getProperty(DynamicParameterizedType.PROPERTY);
Type memberGenericType = ReflectionUtils.getMemberGenericTypeOrNull(entityClass, property);
if (memberGenericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) memberGenericType;
Type genericType = parameterizedType.getActualTypeArguments()[0];
if (genericType instanceof WildcardType) {
genericType = ((WildcardType) genericType).getUpperBounds()[0];
}
Class arrayElementClass = ReflectionUtils.getClass(genericType.getTypeName());
setArrayObjectClass(
arrayElementClass.isArray() ?
arrayElementClass :
ArrayUtil.toArrayClass(arrayElementClass)
);
sqlArrayType = parameters.getProperty(AbstractArrayType.SQL_ARRAY_TYPE);
if (sqlArrayType == null) {
if (Integer.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "integer";
} else if (Long.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "bigint";
} else if (Double.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "float8";
} else if (String.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "text";
} else if (UUID.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "uuid";
} else if (Date.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "timestamp";
} else {
throw new UnsupportedOperationException("The " + arrayElementClass + " is not supported yet!");
}
}
} else {
throw new UnsupportedOperationException("The property " + property + " in the " + entityClass + " entity is not parameterized!");
}
}
public EnumArrayType(Class arrayClass, String sqlArrayType) {
this();
Properties parameters = new Properties();
parameters.setProperty(SQL_ARRAY_TYPE, sqlArrayType);
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
public EnumArrayType(Class arrayClass, String sqlArrayType) {
this();
Properties parameters = new Properties();
parameters.setProperty(SQL_ARRAY_TYPE, sqlArrayType);
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@Override
public void setParameterValues(Properties parameters) {
final XProperty xProperty = (XProperty) parameters.get(DynamicParameterizedType.XPROPERTY);
if (xProperty instanceof JavaXMember) {
type = ReflectionUtils.invokeGetter(xProperty, "javaType");
} else {
type = ((ParameterType) parameters.get(PARAMETER_TYPE)).getReturnedClass();
}
}
@SuppressWarnings("unchecked")
public void setParameterValues(Properties parameters) {
try {
Class eClass = ReflectHelper.classForName(parameters.getProperty(DynamicParameterizedType.ENTITY));
Field field = ReflectionUtils.findField(eClass, parameters.getProperty(DynamicParameterizedType.PROPERTY));
Type fieldType = field.getGenericType();
if (fieldType instanceof Class || fieldType instanceof ParameterizedType) {
type = fieldType;
}
parseSqlType(field.getAnnotations());
return;
} catch (Exception e) {
LOG.error(e.getMessage());
}
final DynamicParameterizedType.ParameterType reader = (DynamicParameterizedType.ParameterType) parameters.get(
DynamicParameterizedType.PARAMETER_TYPE);
if (reader != null) {
type = reader.getReturnedClass();
parseSqlType(reader.getAnnotationsMethod());
} else {
try {
type = ReflectHelper.classForName((String) parameters.get(CLASS_NAME));
} catch (ClassNotFoundException exception) {
throw new HibernateException("class not found", exception);
}
}
}
public LongArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public IntArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public StringArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public TimestampArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public UUIDArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public DateArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
public DoubleArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}
@Override
public void setParameterValues(Properties parameters) {
Class entityClass = ReflectionUtils.getClass(parameters.getProperty(DynamicParameterizedType.ENTITY));
String property = parameters.getProperty(DynamicParameterizedType.PROPERTY);
Type memberGenericType = ReflectionUtils.getMemberGenericTypeOrNull(entityClass, property);
if (memberGenericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) memberGenericType;
Type arrayElementType = parameterizedType.getActualTypeArguments()[0];
String arrayElementClassName = ReflectionUtils.getFieldValue(arrayElementType, "name");
if (arrayElementClassName == null) {
arrayElementClassName = arrayElementType.toString().replaceAll("class ", "");
}
Class arrayElementClass = ReflectionUtils.getClass(arrayElementClassName);
setArrayObjectClass(
arrayElementClass.isArray() ?
arrayElementClass :
ArrayUtil.toArrayClass(arrayElementClass)
);
sqlArrayType = parameters.getProperty(AbstractArrayType.SQL_ARRAY_TYPE);
if (sqlArrayType == null) {
if (Integer.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "integer";
} else if (Long.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "bigint";
} else if (Double.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "float8";
} else if (String.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "text";
} else if (UUID.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "uuid";
} else if(Date.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "timestamp";
} else {
throw new UnsupportedOperationException("The " + arrayElementClass + " is not supported yet!");
}
}
} else {
throw new UnsupportedOperationException("The property " + property + " in the " + entityClass + " entity is not parameterized!");
}
}
@Override
public void setParameterValues(Properties parameters) {
Class entityClass = ReflectionUtils.getClass(parameters.getProperty(DynamicParameterizedType.ENTITY));
String property = parameters.getProperty(DynamicParameterizedType.PROPERTY);
Type memberGenericType = ReflectionUtils.getMemberGenericTypeOrNull(entityClass, property);
if (memberGenericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) memberGenericType;
Type arrayElementType = parameterizedType.getActualTypeArguments()[0];
String arrayElementClassName = ReflectionUtils.getFieldValue(arrayElementType, "name");
if (arrayElementClassName == null) {
arrayElementClassName = arrayElementType.toString().replaceAll("class ", "");
}
Class arrayElementClass = ReflectionUtils.getClass(arrayElementClassName);
setArrayObjectClass(
arrayElementClass.isArray() ?
arrayElementClass :
ArrayUtil.toArrayClass(arrayElementClass)
);
sqlArrayType = parameters.getProperty(AbstractArrayType.SQL_ARRAY_TYPE);
if (sqlArrayType == null) {
if (Integer.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "integer";
} else if (Long.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "bigint";
} else if (Double.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "float8";
} else if (String.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "text";
} else if (UUID.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "uuid";
} else if (Date.class.isAssignableFrom(arrayElementClass)) {
sqlArrayType = "timestamp";
} else {
throw new UnsupportedOperationException("The " + arrayElementClass + " is not supported yet!");
}
}
} else {
throw new UnsupportedOperationException("The property " + property + " in the " + entityClass + " entity is not parameterized!");
}
}
public LongArrayType(Class arrayClass) {
this();
Properties parameters = new Properties();
parameters.put(DynamicParameterizedType.PARAMETER_TYPE, new ParameterizedParameterType(arrayClass));
setParameterValues(parameters);
}