Quiz.java 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576
  1. package nju.seec.helper.entity;
  2. import lombok.Data;
  3. import lombok.experimental.Accessors;
  4. import nju.seec.helper.entity.converter.ListConverter;
  5. import nju.seec.helper.util.enums.QuizState;
  6. import nju.seec.helper.util.enums.QuizType;
  7. import org.hibernate.annotations.CreationTimestamp;
  8. import org.hibernate.annotations.DynamicInsert;
  9. import org.hibernate.annotations.DynamicUpdate;
  10. import org.hibernate.annotations.UpdateTimestamp;
  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 = {"slide_id", "delete_at", "name",}))
  23. @DynamicInsert
  24. @DynamicUpdate
  25. public class Quiz {
  26. @Id
  27. @GeneratedValue(strategy = GenerationType.IDENTITY)
  28. @Column(name = "id")
  29. private Long id;
  30. @Basic
  31. @Column(name = "name", nullable = false)
  32. private String name;
  33. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  34. @JoinColumn(name = "course_id", foreignKey = @ForeignKey(name = "quiz_course"))
  35. private Course course;
  36. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  37. @JoinColumn(name = "slide_id", foreignKey = @ForeignKey(name = "quiz_slide"))
  38. private Slide slide;
  39. @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY)
  40. @JoinColumn(name = "teacher_id", foreignKey = @ForeignKey(name = "quiz_teacher"))
  41. private User teacher;
  42. @Convert(converter = ListConverter.class)
  43. private List<String> questions;
  44. @Enumerated(value = EnumType.STRING)
  45. @Column(name = "type", nullable = false)
  46. private QuizType type;
  47. @Enumerated(value = EnumType.STRING)
  48. @Column(name = "state", nullable = false)
  49. private QuizState state;
  50. @Column(name = "max_submit_number", nullable = false)
  51. private Integer maxSubmitNumber;
  52. @Basic
  53. @Column(name = "create_at", nullable = false, updatable = false)
  54. @CreationTimestamp
  55. private LocalDateTime createAt;
  56. @Basic
  57. @Column(name = "update_at", nullable = false)
  58. @UpdateTimestamp
  59. private LocalDateTime updateAt;
  60. @Column(name = "delete_at", nullable = false, columnDefinition = "bigint default 0 not null")
  61. private Long deleteAt = 0L;
  62. }