@Target({ElementType.TYPE, ElementType.FIELD, ElementType.METHOD}) 
@Retention(RetentionPolicy.RUNTIME)
public @interface Join
{
    /** Table to join to (used when joining to secondary tables). 
     * @return the table
     */
    String table() default "";

    /** Name of the column in the join table. 
     * @return the name of the column in the join table
     */
    String column() default "";

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

    /** The name of the index to generate. 
     * @return the name of the index
     */
    String index() default "";

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

    /**
     * The name of the unique key constraint to generate.
     * @return the name of the unique key constraint
     */
    String uniqueKey() default "";

    /** Whether to use an outer join. 
     * @return whether to use an outer join
     */
    String outer() default "";

    /** Delete action to be applied to any ForeignKey on this join.
     * @return the delete action
     */
    ForeignKeyAction deleteAction() default ForeignKeyAction.UNSPECIFIED;

    /** Detail definition of the join column(s). This is needed for
     * more than one join column.
     * @return the join columns
     */
    Column[] columns() default {};

    /** Generate or assume a primary key constraint exists on the column
     * or columns associated with this join. Specify "true" or "false".
     * @return whether to generate or assume a primary key constraint
     */
    String generatePrimaryKey() default "";

    /** Name for a generated primary key constraint.
     * @return the name of the generated primary key constraint
     */
    String primaryKey() default "";

    /** Generate or assume a foreign key constraint exists on the column
     * or columns associated with this join. Specify "true" or "false".
     * @return whether to generate or assume a foreign key constraint
     */
    String generateForeignKey() default "";

    /** Name for a generated foreign key constraint.
     * @return the name of the generated foreign key constraint
     */
    String foreignKey() default "";

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