我有3个实体类。它们是“游戏”,"GameDescription",“语言”。一个游戏可以有许多描述,但一种语言最多只能有一种描述。例如,一个游戏可以有两个描述,一个用英语,一个用法语。这个游戏只能有一个英文描述,其他的可以用其他语言。如何在我的Spring Boot项目中使用Spring Data和JPA对此进行建模?
游戏
id /名称/ gameDescriptions
GameDescription
id / game_id / language_id / text
语言
id /名称
我尝试了游戏和GameDescription实体之间的OneToMany关系,以及GameDescription和语言实体之间的ManyToOne关系,来做这三个实体之间的映射。但它没有提供所需的结果。
游戏实体
@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
@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种不同语言描述的游戏。
发布于 2019-01-14 20:14:44
另一种方法是使用使用@Embeddable和@EmbeddedId的复合主键。您必须为此修改GameDescription实体,并使用@Embeddable注释创建一个新类。像这样的东西
@Embeddable
public class GameDescriptionId implements Serializable {
@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, setters, override equals and hashcode
}然后修改GameDescription实体
@Entity
@Table(name = "GAME_DESCRIPTION")
public class GameDescription {
@EmbeddedId
private GameDescriptionId id;
private String text;
// getters setters
}你可以在这里阅读更多关于https://vladmihalcea.com/the-best-way-to-map-a-composite-primary-key-with-jpa-and-hibernate/的信息
https://stackoverflow.com/questions/54176800
复制相似问题