Java 类org.hibernate.annotations.ValueGenerationType 实例源码

项目:lams    文件:PropertyBinder.java   
/**
 * In case the given annotation is a value generator annotation, the corresponding value generation strategy to be
 * applied to the given property is returned, {@code null} otherwise.
 */
private <A extends Annotation> AnnotationValueGeneration<A> getValueGenerationFromAnnotation(
        XProperty property,
        A annotation) {
    ValueGenerationType generatorAnnotation = annotation.annotationType()
            .getAnnotation( ValueGenerationType.class );

    if ( generatorAnnotation == null ) {
        return null;
    }

    Class<? extends AnnotationValueGeneration<?>> generationType = generatorAnnotation.generatedBy();
    AnnotationValueGeneration<A> valueGeneration = instantiateAndInitializeValueGeneration(
            annotation, generationType, property
    );

    if ( annotation.annotationType() == Generated.class &&
            property.isAnnotationPresent( javax.persistence.Version.class ) &&
            valueGeneration.getGenerationTiming() == GenerationTiming.INSERT ) {

        throw new AnnotationException(
                "@Generated(INSERT) on a @Version property not allowed, use ALWAYS (or NEVER): "
                        + StringHelper.qualify( holder.getPath(), name )
        );
    }

    return valueGeneration;
}