1 package com.codecool.bytebattlers.model; 2 3 import jakarta.persistence.*; 4 import lombok.Getter; 5 import lombok.Setter; 6 import org.hibernate.annotations.JdbcTypeCode; 7 import org.hibernate.type.SqlTypes; 8 9 import java.util.LinkedHashSet; 10 import java.util.Set; 11 import java.util.UUID; 12 13 @Getter 14 @Setter 15 @Entity 16 @Table(name = "board_game") 17 public class BoardGame { 18 @Id 19 @GeneratedValue(strategy = GenerationType.SEQUENCE) 20 @Column(name = "id", nullable = false) 21 private Long id; 22 23 @Column(name = "public_id", unique = true, insertable = false) 24 @JdbcTypeCode(SqlTypes.UUID) 25 private UUID publicID; 26 27 @Column(name = "game_name") 28 private String gameName; 29 30 @Column(name = "min_player", nullable = false) 31 private int minPlayer; 32 33 @Column(name = "max_player", nullable = false) 34 private int maxPlayer; 35 36 @Column(name = "play_time_in_minutes", nullable = false) 37 private int playTimeInMinutes; 38 39 @ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) 40 @JoinTable(name = "board_game_categories", 41 joinColumns = @JoinColumn(name = "board_game_id"), 42 inverseJoinColumns = @JoinColumn(name = "categories_id")) 43 private Set<Category> categories = new LinkedHashSet<>(); 44 45 @Column(name = "recommended_age", nullable = false) 46 private int recommendedAge; 47 48 @Column(name = "description") 49 private String description; 50 51 @ManyToOne(cascade = CascadeType.ALL, optional = false) 52 @JoinColumn(name = "publisher_id", nullable = false) 53 private Publisher publisher; 54 55 @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true) 56 private Set<Review> reviews = new LinkedHashSet<>(); 57 58 @ManyToMany(mappedBy = "favoriteBoardGames", cascade = {CascadeType.PERSIST, CascadeType.MERGE, CascadeType.REFRESH, CascadeType.DETACH}) 59 private Set<AppUser> usersWhoFavorited = new LinkedHashSet<>(); 60 61 @OneToMany(fetch = FetchType.EAGER, mappedBy = "boardGame", cascade = CascadeType.ALL, orphanRemoval = true) 62 private Set<Rating> ratings = new LinkedHashSet<>(); 63 64 65 }