Quiz.java 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package nju.seec.helper.entity;
  2. import lombok.Data;
  3. import lombok.experimental.Accessors;
  4. import nju.seec.helper.enums.QuizState;
  5. import nju.seec.helper.enums.QuizType;
  6. import org.hibernate.annotations.*;
  7. import javax.persistence.CascadeType;
  8. import javax.persistence.Entity;
  9. import javax.persistence.ForeignKey;
  10. import javax.persistence.Table;
  11. import javax.persistence.*;
  12. import java.time.LocalDateTime;
  13. import java.util.List;
  14. /**
  15. * @author sheen
  16. * <p>
  17. * updated by cst
  18. */
  19. @Data
  20. @Accessors(chain = true)
  21. @Entity
  22. @Table(name = "quiz", uniqueConstraints = @UniqueConstraint(name = "quiz_name_unique", columnNames = {"delete_at", "slide_id", "name",}))
  23. @DynamicInsert
  24. @DynamicUpdate
  25. @Where(clause = "delete_at = 0 and slide_id in (select s.id from slide s where s.delete_at = 0) and course_id in (select c.id from course c where c.delete_at = 0)")
  26. //@Cacheable
  27. //@org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE)
  28. public class Quiz {
  29. @Id
  30. @GeneratedValue(strategy = GenerationType.IDENTITY)
  31. @Column(name = "id")
  32. private Long id;
  33. @Basic
  34. @Column(name = "name", nullable = false)
  35. private String name;
  36. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  37. @JoinColumn(name = "course_id", foreignKey = @ForeignKey(name = "quiz_course"))
  38. private Course course;
  39. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  40. @JoinColumn(name = "slide_id", foreignKey = @ForeignKey(name = "quiz_slide"))
  41. private Slide slide;
  42. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  43. @JoinColumn(name = "teacher_id", foreignKey = @ForeignKey(name = "quiz_teacher"))
  44. private User teacher;
  45. @Type(type = "json")
  46. @Column(columnDefinition = "json", nullable = false)
  47. private List<String> questions;
  48. @Enumerated(value = EnumType.STRING)
  49. @Column(name = "type", nullable = false)
  50. private QuizType type;
  51. @Enumerated(value = EnumType.STRING)
  52. @Column(name = "state", nullable = false)
  53. private QuizState state;
  54. @Column(name = "max_submit_number", nullable = false)
  55. private Integer maxSubmitNumber;
  56. @Column(name = "create_at", nullable = false, updatable = false)
  57. @CreationTimestamp
  58. private LocalDateTime createAt;
  59. @Column(name = "update_at", nullable = false)
  60. @UpdateTimestamp
  61. private LocalDateTime updateAt;
  62. @ColumnDefault("0")
  63. @Column(name = "delete_at", nullable = false)
  64. private Long deleteAt = 0L;
  65. }