public class ${entity.getClassShortName()} implements Serializable {
	
	private static final long serialVersionUID = 1L;
#####
##### fields
#####
#foreach ($mapping in $mappings)
#if ($accessType == "FIELD")

#if ($mapping.isBasicMapping())
	@Basic
#elseif ($mapping.isIdMapping())
	@Id
	@GeneratedValue
#elseif ($mapping.isEmbeddedMapping())
	@Embedded
#elseif ($mapping.isElementCollectionMapping())
	@ElementCollection
#end
	@Field(name = "${mapping.getNoSqlField()}")
#end
#if ($mapping.isElementCollectionMapping())
	private $mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getName();
#else
	private $mapping.getAttributeTypeShortName() $mapping.getName();
#end
#end

	public ${entity.getClassShortName()}() {
		super();
	}
#foreach ($mapping in $mappings)

#if ($accessType == "PROPERTY")
#if ($mapping.isBasicMapping())
	@Basic
#elseif ($mapping.isIdMapping())
	@Id
	@GeneratedValue
#elseif ($mapping.isEmbeddedMapping())
	@Embedded
#elseif ($mapping.isElementCollectionMapping())
	@ElementCollection
#end
	@Field(name = "${mapping.getNoSqlField()}")
#end
#if ($mapping.isElementCollectionMapping())
	public $mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getGetMethodName()() {
		return this.$mapping.getName();
	}
#else
	public $mapping.getAttributeTypeShortName() $mapping.getGetMethodName()() {
		return this.$mapping.getName();
	}
#end
#end
#foreach ($mapping in $mappings)

#if ($mapping.isElementCollectionMapping())
	public void $mapping.getSetMethodName()($mapping.getAttributeTypeShortName()<$mapping.getTargetClassShortName()> $mapping.getName()) {
		this.$mapping.getName() = $mapping.getName();
	}
#else
	public void $mapping.getSetMethodName()($mapping.getAttributeTypeShortName() $mapping.getName()) {
		this.$mapping.getName() = $mapping.getName();
	}
#end
#end
}