У меня есть 3 класса сущностей. Это «Игра», «Описание игры», «Язык».
У игры может быть много описаний, но не более одного описания с языком. Например, игра может иметь 2 описания: одно на английском, другое на французском. Эта игра может иметь только одно английское описание, остальные могут быть на других языках. Как я могу смоделировать это в моем проекте Spring Boot с Spring Data и JPA?
Игра
идентификатор / имя / описание игры
GameDescription
id / game_id / language_id / text
Язык
идентификатор / имя
Я попытался установить взаимосвязь OneToMany между сущностями Game & GameDescription и взаимосвязь ManyToOne между сущностями GameDescription и Language, чтобы выполнить сопоставление между этими 3 сущностями. Но это не обеспечивает требуемого результата.
Игровая сущность
@Entity
@Table(name="GAME")
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(mappedBy = "game")
private List<GameDescription> descriptions;
// getters and setters
}
GameDescription Entity
@Entity
@Table(name = "GAME_DESCRIPTION")
public class GameDescription {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "GAME_ID")
private Game game;
@ManyToOne(cascade = {CascadeType.DETACH, CascadeType.MERGE,
CascadeType.PERSIST, CascadeType.REFRESH})
@JoinColumn(name = "LANG_ID")
private Language language;
// getters and setters
}
Language Entity
@Entity
@Table(name = "LANGUAGE")
public class Language {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "NAME")
private String name;
@Column(name = "LOCAL_NAME")
private String localName;
// getters and setters
}
Мне нужно, чтобы эти три объекта были хорошо структурированы, так как для каждого языка должно быть только одно описание игры. Например, я ожидаю игру с описаниями на 5 разных языках.