##included template. Generates the @JoinTable, @JoinColumn or @JoinColumns annotation.
##Assumes that the context has a "role" object representing the generated AssociationRole
##
##macro joinColumn uses $column, $referencedColumn
#macro (joinColumn $column $referencedColumn)
#set ($members = "name=$customizer.quote($column.joinColumnName)")
#if( !$referencedColumn.primaryKey )
#set ($members = "$members, referencedColumnName=$customizer.quote($referencedColumn.name)")
#end
#if( $customizer.generateDDLAnnotations )
#if ($column.unique && !$column.primaryKey)
#set ($members = "$members, unique=true")
#end
#if (!$column.nullable)
#set ($members = "$members, nullable=false")
#end
#end
#if ($customizer.generateDDLAnnotations && !$role.association.joinTable && !$role.referrerTable.isColumnUpdateInsert($role, $column))
#set ($members = "$members, insertable=false, updatable=false")
#end
@JoinColumn($members)#end
##
##
##
#if ($role.association.joinTable)
#set ($joinTable = $role.association.joinTable)
	@JoinTable(
		name="${joinTable.joinTableAnnotationName}"
#if ($joinTable.schema!="")
		, schema="${joinTable.schema}"
#end
		, joinColumns={
#foreach ($column in $role.referrerColumns)
#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
##$referencedColumn is the column in the join table
			#joinColumn($referencedColumn $column),
#end
			}
		, inverseJoinColumns={
#foreach ($column in $role.referencedColumns)
#set ($referencedColumn = $role.getReferrerColumn(${column.name}))
##$referencedColumn is the column in the join table
			#joinColumn($referencedColumn $column),
#end
			}
		)
#else
#if ($role.referrerColumns.size() == 1)
#set ($column = $role.referrerColumns.get(0))
#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
#set ($referencedTableName = $role.getReferencedTable().getName() )
#set( $referencedTablePkName = $role.getReferencedTable().getPrimaryKeyColumn().name )
#set( $computedJoinColumnName = "${role.propertyName}_${referencedTablePkName}" )
#if($column.name.toUpperCase() != $computedJoinColumnName.toUpperCase() )
	#joinColumn($column $referencedColumn)

#elseif( $customizer.generateDDLAnnotations )
	#joinColumn($column $referencedColumn)

#end
#else
	@JoinColumns({
#foreach ($column in $role.referrerColumns)
#set ($referencedColumn = $role.getReferencedColumn(${column.name}))
		#joinColumn($column $referencedColumn),
#end		
		})
#end
#end