Create Ticket Validation Entity

In this lesson, we'll create the ticket validation entity that records the validation of a ticket when attendees enter an event.

This entity tracks important details like the validation method used (QR code scan or manual) and the validation status, forming a key part of our ticket management system.

Creating the Ticket Validation Entity

The TicketValidation entity represents a single validation attempt of a ticket:

@Entity @Table(name = "ticket_validations") @Getter @Setter @AllArgsConstructor @NoArgsConstructor @Builder public class TicketValidation { @Id @Column(name = "id", nullable = false, updatable = false) @GeneratedValue(strategy = GenerationType.UUID) private UUID id; @Column(name = "status", nullable = false) @Enumerated(EnumType.STRING) private TicketValidationStatusEnum status; @Column(name = "validation_method", nullable = false) @Enumerated(EnumType.STRING) private TicketValidationMethod validationMethod; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "ticket_id") private Ticket ticket; @CreatedDate @Column(name = "created_at", updatable = false, nullable = false) private LocalDateTime createdAt; @LastModifiedDate @Column(name = "updated_at", nullable = false) private LocalDateTime updatedAt; }

Establishing the Relationship with Ticket

We need to update the Ticket class to maintain the relationship with its validations:

@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; @OneToMany(mappedBy = "ticket", cascade = CascadeType.ALL) private List<TicketValidation> validations = new ArrayList<>(); // TODO: QrCode @CreatedDate @Column(name = "created_at", updatable = false, nullable = false) private LocalDateTime createdAt; @LastModifiedDate @Column(name = "updated_at", nullable = false) private LocalDateTime updatedAt; }

Summary

  • Created TicketValidation class to model a ticket being validated at the event
  • Added validations reference to the Ticket class
© 2026 Devtiro Ltd. All rights reserved