@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME)
public @interface Version
{
    /**
     * Strategy for versioning of objects of this class.
     * @return the strategy for versioning objects of this class
     */
    VersionStrategy strategy() default VersionStrategy.UNSPECIFIED;

    /**
     * Custom strategy for versioning of objects of this class.
     * If customStrategy is non-empty, strategy must be UNSPECIFIED.
     * @return the custom strategy for versioning objects of this class
     */
    String customStrategy() default "";

    /**
     * Name of the column for the version.
     * @return the name of the column for the version
     */
    String column() default "";

    /**
     * Whether the version column(s) is(are) indexed.
     * @return whether the version column(s) is(are) indexed
     */
    String indexed() default "";

    /**
     * The column(s) making up the version.
     * @return the column(s) making up the version
     */
    Column[] columns() default {};

    /** Vendor extensions. 
     * @return the vendor extensions
     */
    Extension[] extensions() default {};
}
