package ru.ulstu.students.model; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.validator.constraints.NotBlank; import ru.ulstu.core.model.BaseEntity; import ru.ulstu.deadline.model.Deadline; import ru.ulstu.tags.model.Tag; import javax.persistence.*; import java.util.ArrayList; import java.util.Date; import java.util.List; @Entity public class Task extends BaseEntity { public enum TaskStatus { IN_WORK("В работе"), COMPLETED("Завершен"), FAILED("Провалены сроки"), LOADED_FROM_KIAS("Загружен автоматически"); private String statusName; TaskStatus(String name) { this.statusName = name; } public String getStatusName() { return statusName; } } @NotBlank private String title; private String description; @Enumerated(value = EnumType.STRING) private ru.ulstu.students.model.Task.TaskStatus status = TaskStatus.IN_WORK; @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER) @JoinColumn(name = "task_id", unique = true) @Fetch(FetchMode.SUBSELECT) @OrderBy("date") private List deadlines = new ArrayList<>(); @Column(name = "create_date") @Temporal(TemporalType.TIMESTAMP) private Date createDate = new Date(); @Column(name = "update_date") @Temporal(TemporalType.TIMESTAMP) private Date updateDate = new Date(); @ManyToMany(fetch = FetchType.EAGER) @JoinTable(name = "task_tags", joinColumns = {@JoinColumn(name = "task_id")}, inverseJoinColumns = {@JoinColumn(name = "tag_id")}) private List tags = new ArrayList<>(); public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public TaskStatus getStatus() { return status; } public void setStatus(TaskStatus status) { this.status = status; } public String getDescription() { return description; } public void setDescription(String description) { this.description = description; } public List getDeadlines() { return deadlines; } public void setDeadlines(List deadlines) { this.deadlines = deadlines; } public Date getCreateDate() { return createDate; } public void setCreateDate(Date createDate) { this.createDate = createDate; } public Date getUpdateDate() { return updateDate; } public void setUpdateDate(Date updateDate) { this.updateDate = updateDate; } public List getTags() { return tags; } public void setTags(List tags) { this.tags = tags; } }