@Target(ElementType.TYPE) 
@Retention(RetentionPolicy.RUNTIME)
public @interface DatastoreIdentity
{
    /**
     * Strategy to use when generating datastore identities
     * @return Strategy to use when generating datastore identities
     */
    IdGeneratorStrategy strategy() default IdGeneratorStrategy.UNSPECIFIED;

    /** Custom strategy to use to generate the value for the identity. 
     * If customStrategy is non-empty, then strategy must be UNSPECIFIED.
     * @return the custom strategy
     */
    String customStrategy() default "";

    /**
     * Name of sequence to use when the strategy involves sequences
     * @return Name of sequence to use when the strategy involves sequences
     */
    String sequence() default "";

    /**
     * Name of the column for the datastore identity
     * @return Name of the column for the datastore identity
     */
    String column() default "";

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

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