Create Ticket Type Entity
In this lesson, we'll create the TicketType entity which represents different categories of tickets available for events in our ticket platform.
Create the Ticket Type Entity
The ticket type entity requires specific attributes to effectively model different ticket categories.
Let's create a new entity class with its required fields and relationships:
@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;
// TODO: Tickets
@CreatedDate
@Column(name = "created_at", updatable = false, nullable = false)
private LocalDateTime createdAt;
@LastModifiedDate
@Column(name = "updated_at", nullable = false)
private LocalDateTime updatedAt;
}Event Class Update
To complete the relationship between events and ticket types, we need to update the Event class:
@Entity
@Table(name = "events")
@Getter
@Setter
@NoArgsConstructor
@AllArgsConstructor
@Builder
public class Event {
@Id
@Column(name = "id", updatable = false, nullable = false)
@GeneratedValue(strategy = GenerationType.UUID)
private UUID id;
@Column(name = "name", nullable = false)
private String name;
@Column(name = "start")
private LocalDateTime start;
@Column(name = "end")
private LocalDateTime end;
@Column(name = "venue", nullable = false)
private String venue;
@Column(name = "sales_start")
private LocalDateTime salesStart;
@Column(name = "sales_end")
private LocalDateTime salesEnd;
@Column(name = "status", nullable = false)
@Enumerated(EnumType.STRING)
private EventStatusEnum status;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "organizer_id")
private User organizer;
@ManyToMany(mappedBy = "attendingEvents")
private List<User> attendees = new ArrayList<>();
@ManyToMany(mappedBy = "staffingEvents")
private List<User> staff = new ArrayList<>();
@OneToMany(mappedBy = "event", cascade = CascadeType.ALL)
private List<TicketType> ticketTypes = 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
TicketTypeclass to model the different types of ticket available for events - Added
ticketTypesreference in theEventclass