package nju.seec.helper.entity; import lombok.Data; import lombok.experimental.Accessors; import org.hibernate.annotations.*; import javax.persistence.CascadeType; import javax.persistence.Entity; import javax.persistence.ForeignKey; import javax.persistence.Table; import javax.persistence.*; import java.time.LocalDateTime; /** * @author cst */ @Data @Accessors(chain = true) @Entity @Table(name = "course", uniqueConstraints = @UniqueConstraint(name = "course_name_unique", columnNames = {"delete_at", "teacher_id", "name"})) @DynamicUpdate @DynamicInsert @Where(clause = "delete_at = 0") @Cacheable @org.hibernate.annotations.Cache(usage = CacheConcurrencyStrategy.READ_WRITE) public class Course { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false) private String name; @Column(nullable = false) private String bio; @Column(nullable = false) private String code; @Column(name = "create_at", nullable = false, updatable = false) @CreationTimestamp private LocalDateTime createAt; @ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE, CascadeType.REFRESH}, fetch = FetchType.LAZY) @JoinColumn(name = "teacher_id", nullable = false, foreignKey = @ForeignKey(name = "course_teacher")) private User teacher; @ColumnDefault("0") @Column(name = "delete_at", nullable = false) private Long deleteAt = 0L; }