Ваше использование правильно. Я думаю, это ошибка реализации.
Посмотрите, как справка по типу разрешения гибернации TypeHelper # getErasedReferenceType :
public static Class<?> getErasedReferenceType(Type type) {
Contracts.assertTrue( isReferenceType( type ), "type is not a reference type: %s", type );
return (Class<?>) getErasedType( type );
}
isReferenceType
не проверяет тип подстановочного знака TypeHelper # isReferenceType :
private static boolean isReferenceType(Type type) {
return type == null
|| type instanceof Class<?>
|| type instanceof ParameterizedType
|| type instanceof TypeVariable<?>
|| type instanceof GenericArrayType;
}
Таким образом, завершение не удалось, когда hibernate пытается проверить содержимое списка (вызвано <@NotNull ? extends BigDecimal>
)
Но почему-то TypeHelper # getErasedType поддерживает подстановочный тип:
public static Type getErasedType(Type type) {
...
if ( type instanceof WildcardType ) {
Type[] upperBounds = ( (WildcardType) type ).getUpperBounds();
return getErasedType( upperBounds[0] );
}
...
}
Я попытаюсь открыть вопрос об этом.