package com.syzton.sunread.model.user; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.DiscriminatorValue; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.JoinColumn; import javax.persistence.OneToMany; import javax.persistence.OneToOne; import javax.persistence.PrePersist; import javax.persistence.Table; import javax.persistence.Transient; import javax.validation.constraints.NotNull; import org.hibernate.annotations.Type; import org.joda.time.DateTime; import org.springframework.beans.factory.annotation.Configurable; import com.fasterxml.jackson.annotation.JsonIgnore; import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.syzton.sunread.model.coinhistory.CoinHistory; import com.syzton.sunread.model.task.Task; import com.syzton.sunread.util.DateSerializer; /** * Created by jerry on 3/16/15. */ @Entity @Table(name="student") @DiscriminatorValue("S") @Configurable public class Student extends User{ public static final int MAX_LENGTH_IDENTITY = 16; @Column(length = MAX_LENGTH_IDENTITY) private String identity; @NotNull private long campusId; @NotNull private long clazzId; @NotNull private long gradeId; @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER,optional = true) @JoinColumn(name="task_id") private Task task = new Task(); @OneToOne(cascade = CascadeType.ALL,fetch = FetchType.EAGER,optional = true) @JoinColumn(name = "user_statistic_id") private UserStatistic statistic = new UserStatistic(); @OneToMany(cascade = CascadeType.ALL) @JoinColumn(name = "student_id") private Set<CategoryCount> categoryCount = new HashSet<>(); @Transient private long enrollmentTime; // for receive json @JsonIgnore @JsonSerialize(using = DateSerializer.class) @Type(type="org.jadira.usertype.dateandtime.joda.PersistentDateTime") private DateTime enrollmentDate; // for insert DB @OneToMany(cascade = CascadeType.ALL,mappedBy = "student") private Set<CoinHistory> coinHistorySet = new HashSet<>(); @PrePersist public void prePersist(){ super.prePersist(); this.enrollmentDate = new DateTime(this.enrollmentTime); } public String getIdentity() { return identity; } public void setIdentity(String identity) { this.identity = identity; } public long getEnrollmentTime() { return enrollmentTime; } public void setEnrollmentTime(long enrollmentTime) { this.enrollmentTime = enrollmentTime; } public Set<CategoryCount> getCategoryCount() { return categoryCount; } public void setCategoryCount(Set<CategoryCount> categoryCount) { this.categoryCount = categoryCount; } public Set<CoinHistory> getCoinHistorySet() { return coinHistorySet; } public void setCoinHistorySet(Set<CoinHistory> coinHistorySet) { this.coinHistorySet = coinHistorySet; } public Task getTask() { return task; } public void setTask(Task task) { this.task = task; } public long getCampusId() { return campusId; } public void setCampusId(long campusId) { this.campusId = campusId; } public long getClazzId() { return clazzId; } public void setClazzId(long clazzId) { this.clazzId = clazzId; } public long getGradeId() { return gradeId; } public void setGradeId(long gradeId) { this.gradeId = gradeId; } public UserStatistic getStatistic() { return statistic; } public void setStatistic(UserStatistic statistic) { this.statistic = statistic; } }