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 +
'}';
}
}