Create Ticket Entity
In this lesson, we'll build the Ticket entity, which represents a purchased ticket for an event.
Create the Ticket Entity
A ticket is a record of a purchase that gives someone access to an event. Each ticket needs to track its status, who bought it, and what type of ticket it is.
Let's create our Ticket class:
@Entity
@Table(name = "tickets")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Ticket {
@Id
@Column(name = "id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private TicketStatusEnum status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "ticket_type_id")
private TicketType ticketType;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "purchaser_id")
private User purchaser;
// TODO: Validation
// TODO: QrCode
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Update the Ticket Type Entity
We also need to update our TicketType class to include the inverse relationship:
@Entity
@Table(name = "ticket_types")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class TicketType {
@Id
@Column(name = "id", nullable = false, updatable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "price", nullable = false)
private Double price;
@Column(name = "total_available")
private Integer totalAvailable;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "event_id")
private Event event;
@OneToMany(mappedBy = "ticketType", cascade = CascadeType.ALL)
private List<Ticket> tickets = new ArrayList<>();
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Summary
- Created
Ticketclass to model a ticket to an event - Added
ticketsreference to theTicketTypeclass