in google-cloud-spanner-hibernate-dialect/src/main/java/com/google/cloud/spanner/hibernate/types/internal/ArrayJavaTypeDescriptor.java [87:117]
public void setParameterValues(Properties parameters) {
// Throw error if type is used on a non-List field.
if (!parameters.get(DynamicParameterizedType.RETURNED_CLASS).equals(List.class.getName())) {
String message =
String.format(
"Found invalid type annotation on field: %s. "
+ "The SpannerArrayListType must be applied on a java.util.List entity field.",
parameters.get(DynamicParameterizedType.PROPERTY));
throw new IllegalArgumentException(message);
}
// Get the class and the field name.
Class<?> entityClass = getClass(parameters.getProperty(DynamicParameterizedType.ENTITY));
Field field =
FieldUtils.getDeclaredField(
entityClass, parameters.getProperty(DynamicParameterizedType.PROPERTY), true);
Type genericType = field.getGenericType();
if (genericType instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) genericType;
// Note: This is safe since we know the type is List<T> at this point.
Class<?> listParamType = (Class<?>) parameterizedType.getActualTypeArguments()[0];
spannerType = listParamType;
spannerTypeCode = getSpannerTypeCode(listParamType);
} else {
throw new IllegalArgumentException(
"You must specify an explicit parameterized type for your List type; i.e. List<Integer>");
}
}