##included template. Generates the @ManyToMany annotation.
##Assumes that the context has a "role" object representing the generated AssociationRole
#set ($cascade=$customizer.genCascadesXml($role))
#if ($role.association.bidirectional && !$role.isReferrerRole())##the owning side (either side for many-to-many)
	#set ($members = $customizer.appendAttribute("", "name", $role.propertyName, true))
	#set ($members = $customizer.appendAttribute($members, "mapped-by", $role.oppositeRole.propertyName, true))
	#set ($members = $customizer.appendAttribute($members, "target-entity", $role.referencedTable.qualifiedClassName, true))
	#set ($members = $customizer.appendAttribute($members, "attribute-type", $role.referencedTable.defaultCollectionType, true))
#if ($customizer.genFetchXml($role.referrerTable)!="" && $customizer.genFetchXml($role.referrerTable)!="LAZY")
	#set ($members = $customizer.appendAttribute($members, "fetch", $customizer.genFetchXml($role.referrerTable), true))
#end
			<many-to-many $members>
#if ($cascade!="")
				<cascade>
					$cascade
				</cascade>
#end
			</many-to-many>
#else
	#set ($members = $customizer.appendAttribute("", "name", $role.propertyName, true))
	#set ($members = $customizer.appendAttribute($members, "target-entity", $role.referencedTable.qualifiedClassName, true))
	#set ($members = $customizer.appendAttribute($members, "attribute-type", $role.referencedTable.defaultCollectionType, true))
#if ($customizer.genFetchXml($role.referrerTable)!="" && $customizer.genFetchXml($role.referrerTable)!="LAZY")
	#set ($members = $customizer.appendAttribute($members, "fetch", $customizer.genFetchXml($role.referrerTable), true))
#end
			<many-to-many $members>
#parse("join.vm")
#if ($cascade!="")
				<cascade>
					$cascade
				</cascade>
#end
			</many-to-many>
#end