import static java.util.Objects.requireNonNull; import static com.aa.cleanwithus.util.ToStrings.toStringBuilder; import java.io.Serializable; import java.util.HashSet; import java.util.Objects; import java.util.Optional; import java.util.Set; import javax.persistence.CollectionTable; import javax.persistence.Column; import javax.persistence.ElementCollection; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQuery; import javax.persistence.SequenceGenerator; import javax.persistence.Table; import javax.persistence.UniqueConstraint; import javax.persistence.Version; import javax.validation.constraints.NotNull; import org.hibernate.envers.Audited; import com.aa.cleanwithus.station.Station; @Entity @Table( name = "provider_station", uniqueConstraints = @UniqueConstraint( name = "uq_provider_station", columnNames = {"ps_provider", "ps_station"} ) ) @NamedQuery( name = "ProviderStation.findProviderStation", query = "from ProviderStation ps " + "where ps.provider = :provider " + " and ps.station = :station" ) @SequenceGenerator(name = "provider_station_seq", sequenceName = "provider_station_seq") @Audited public class ProviderStation implements Serializable { private static final long serialVersionUID = -4853563333444034742L; @Id @GeneratedValue(generator = "provider_station_seq") @Column(name = "provider_station_id") private Long id; @Version @Column(name = "ps_version", nullable = false) private Integer version; @ManyToOne(optional = false) @JoinColumn(name = "ps_provider", nullable = false) @NotNull private Provider provider; @ManyToOne(optional = false) @JoinColumn(name = "ps_station", nullable = false) @NotNull private Station station; @Column(name = "ps_active", nullable = false) @NotNull private Boolean active; @ElementCollection @CollectionTable( name = "provider_station_jobtype", joinColumns = @JoinColumn(name = "psj_ps_id", nullable = false) ) private Set jobTypes = new HashSet<>(); public ProviderStation(){} public ProviderStation( Provider provider, Station station, Boolean active ){ this.provider = requireNonNull(provider); this.station = requireNonNull(station); this.active = requireNonNull(active); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (!(obj instanceof ProviderStation)) return false; ProviderStation that = (ProviderStation)obj; return Objects.equals(this.getProvider(), that.getProvider()) && Objects.equals(this.getStation(), that.getStation()); } @Override public int hashCode() { return Objects.hash(getProvider(), getStation()); } @Override public String toString() { return toStringBuilder(this) .append("id", getId()) .append("version", getVersion()) .append("provider", getProvider()) .append("station", getStation()) .append("active", isActive()) .append("jobTypes", getJobTypes()) .build(); } public Optional getId() { return Optional.ofNullable(id); } void setId(Optional id) { this.id = id.orElse(null); } public Optional getVersion() { return Optional.ofNullable(version); } void setVersion(Optional version) { this.version = version.orElse(null); } public Provider getProvider() { return provider; } public void setProvider(Provider provider) { this.provider = requireNonNull(provider); } public Station getStation() { return station; } public void setStation(Station station) { this.station = requireNonNull(station); } public Boolean isActive() { return active; } public void setActive(Boolean active) { this.active = requireNonNull(active); } public Set getJobTypes() { return jobTypes; } }