【发布时间】:2019-06-08 03:54:48
【问题描述】:
我有 3 个实体类。它们是“游戏”、“游戏描述”、“语言”。 一个游戏可以有很多描述,但最多只能有一个描述与一种语言。例如,一个游戏可以有 2 个描述,一个是英文的,一个是法文的。这个游戏只能有一个英文描述,其他的可以是其他语言。如何使用 Spring Data 和 JPA 在我的 Spring Boot 项目中对此进行建模?
游戏
id/名称/游戏描述
游戏描述
id / game_id / language_id / text
语言
身份证/姓名
我尝试了 Game 和 GameDescription 实体之间的 OneToMany 关系,以及 GameDescription 和 Language 实体之间的 ManyToOne 关系来做这 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
}
游戏描述实体
@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
}
语言实体
@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
}
我需要结构精细的这 3 个实体,因为每种语言应该只有一个游戏描述。例如,我希望游戏有 5 种不同语言的描述。
【问题讨论】:
-
我是否正确假设您正在尝试根据您的实体生成表并且您希望正确定义约束?因为抛开约束,这个设置看起来是正确的。
标签: spring-boot spring-data-jpa h2 one-to-many many-to-one