package com.phonoforce.tramory.entities; import com.phonoforce.tramory.annotations.EntitySet; import javax.persistence.*; import javax.xml.bind.annotation.*; import java.util.HashSet; import java.util.Set; import static javax.persistence.GenerationType.IDENTITY; @Entity @Table(name = "Album") @XmlRootElement(name = "album") @XmlAccessorType(XmlAccessType.FIELD) public class Album implements IEntity { @XmlElement(required = true) private int albumId; @XmlElement(required = true) private String title; @XmlElement(required = true) private int labelId; @XmlElement(required = true) private int year; // TODO: Replace by line below (change in ERM!!) // private Date published; @XmlElementWrapper(name = "artists") @XmlElement(name = "artist", required = true) private Set<Artist> artists; public Album() { this.artists = new HashSet<>(); } @Id @GeneratedValue(strategy = IDENTITY) @Column(name = "album_id", unique = true, nullable = false) public int getId() { return albumId; } public void setId(int albumId) { this.albumId = albumId; } @Column(name = "title", nullable = false) public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } @Column(name = "label_id", nullable = true) public int getLabelId() { return labelId; } public void setLabelId(int labelId) { this.labelId = labelId; } @Column(name = "release_year", nullable = true) public int getYear() { return year; } public void setYear(int year) { this.year = year; } @ManyToMany( fetch = FetchType.EAGER, cascade = CascadeType.ALL ) @JoinTable( name = "AlbumArtist", joinColumns = { @JoinColumn( name = "album_id", nullable = false, updatable = false )}, inverseJoinColumns = { @JoinColumn( name = "artist_id", nullable = false, updatable = false )} ) @EntitySet public Set<Artist> getArtists() { return this.artists; } public void setArtists(Set<Artist> artists) { this.artists = artists; } @Override public String toString() { return "Album{" + "albumId=" + albumId + ", title='" + title + '\'' + ", labelId=" + labelId + ", year=" + year + '}'; } }