package com.project.model;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Set;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.validation.constraints.NotBlank;
import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import org.hibernate.annotations.CreationTimestamp;
import org.hibernate.annotations.UpdateTimestamp;
@Table(name="projekt") //potrzebne tylko jeżeli nazwa tabeli w bazie danych ma być inna od nazwy klasy
public class Projekt {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="projekt_id") //tylko jeżeli nazwa kolumny w bazie danych ma być inna od nazwy zmiennej
//lepszym rozwiązaniem jest przechowywanie komunikatów poza kodem źródłowym np. w plikach *.properties
@NotNull
@NotBlank(message = "Pole nazwa nie może być puste!")
@Size(min = 3, max = 50, message = "Nazwa musi zawierać od {min} do {max} znaków!")
@Column(nullable = false, length = 50)
@NotNull
@Size(max = 50, message = "Opis może zawierać do {max} znaków!")
@Column(nullable = false, length = 200)
@NotNull
@CreationTimestamp
@Column(name = "dataczas_utworzenia", nullable = false, updatable = false)
private LocalDateTime dataCzasUtworzenia;
@NotNull
@UpdateTimestamp
@Column(name = "data_oddania", nullable = false)
private LocalDate dataOddania;
@OneToMany(mappedBy = "projekt")
@JsonIgnoreProperties({"projekt"})
private List<Zadanie
> zadania
;
@JsonIgnoreProperties({"projekty"})
@ManyToMany
@JoinTable(
name = "projekt_student",
joinColumns = {@JoinColumn(name="projekt_id")},
inverseJoinColumns = {@JoinColumn(name="student_id")}
)
private Set<Student
> studenci
;
public Set<Student
> getStudenci
() {
return studenci;
}
public void setStudenci
(Set<Student
> studenci
) {
this.studenci = studenci;
}
public List<Zadanie
> getZadania
() {
return zadania;
}
public void setZadania
(List<Zadanie
> zadania
) {
this.zadania = zadania;
}
return projektId;
}
public void setProjektId
(Integer projektId
) {
this.projektId = projektId;
}
return nazwa;
}
public void setNazwa
(String nazwa
) {
this.nazwa = nazwa;
}
return opis;
}
public void setOpis
(String opis
) {
this.opis = opis;
}
public LocalDateTime getDataCzasUtworzenia() {
return dataCzasUtworzenia;
}
public void setDataCzasUtworzenia(LocalDateTime dataCzasUtworzenia) {
this.dataCzasUtworzenia = dataCzasUtworzenia;
}
public LocalDate getDataOddania() {
return dataOddania;
}
public void setDataOddania(LocalDate dataOddania) {
this.dataOddania = dataOddania;
}
public Projekt() {}
public Projekt
(Integer projektId,
String nazwa,
String opis, LocalDateTime dataCzasUtworzenia, LocalDate dataOddania
) {
super();
this.projektId = projektId;
this.nazwa = nazwa;
this.opis = opis;
this.dataCzasUtworzenia = dataCzasUtworzenia;
this.dataOddania = dataOddania;
}
public Projekt
(String nazwa,
String opis, LocalDate dataOddania
) {
super();
this.nazwa = nazwa;
this.opis = opis;
this.dataOddania = dataOddania;
}
}