Create Event Entity

In a ticketing platform, events are central to everything - they're what people buy tickets for and attend. Let's create the event entity which will store all the important information about events in our system.

Create the Event Entity

The event entity needs to store basic event details and maintain relationships with users who organize, attend, or staff the event.

@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<>(); @CreatedDate @Column(name = "created_at", updatable = false, nullable = false) private LocalDateTime createdAt; @LastModifiedDate @Column(name = "updated_at", nullable = false) private LocalDateTime updatedAt; }

Update the User Entity

The User class needs corresponding relationships to events:

@Entity @Table(name = "users") @Getter @Setter @NoArgsConstructor @AllArgsConstructor @Builder public class User { @Id @Column(name = "id", updatable = false, nullable = false) private UUID id; @Column(name = "name", nullable = false) private String name; @Column(name = "email", nullable = false) private String email; @OneToMany(mappedBy = "organizer", cascade = CascadeType.ALL) private List<Event> organizedEvents = new ArrayList<>(); @ManyToMany @JoinTable( name = "user_attending_events", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "event_id") ) private List<Event> attendingEvents = new ArrayList<>(); @ManyToMany @JoinTable( name = "user_staffing_events", joinColumns = @JoinColumn(name = "user_id"), inverseJoinColumns = @JoinColumn(name = "event_id") ) private List<Event> staffingEvents = 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 an initial Event class
  • Added Event references to the User class
© 2026 Devtiro Ltd. All rights reserved