View Javadoc
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  }