【发布时间】:2019-12-04 08:35:40
【问题描述】:
我正在一个项目中使用 Spring Boot 和 MySQL,我使用 3rd 方 Web API 来提取玩家的游戏日志,并查看他在过去 20 场左右的“战斗”中使用了哪些套牌。
目前,我有三张桌子,每张都标有牌组、牌组卡和卡片。游戏中有大约 100 张牌,每副牌包含 8 张牌。我将这种关系归类为 Deck 和 Card 实体之间的多对多双向关系,因为每个牌组包含不止一张牌,并且每张牌都可以分配给许多不同的牌组。我接着创建了 deck_cards,它保存了每个表的主键 (id)。
现在,我可以从 API 获得的信息是每个玩家在战斗中使用的 8 张牌。 JSON 响应包括卡片的 ID,这些卡片构成了战斗中使用的套牌。我唯一的问题是,我不知道如何对照已存储在 db 中的卡组检查该卡组,以免存储重复项。是否有可以帮助解决此问题的 JPA/Spring Boot 函数或 SQL 语句?提前谢谢你。
public class Deck {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
})
@JoinTable(name = "deck_cards",
joinColumns = { @JoinColumn(name = "deck_id")},
inverseJoinColumns = { @JoinColumn(name = "card_id")})
private Set<Card> cards = new HashSet<>();
//...
}
public class Card {
@Id
private Integer id;
@NotBlank
private String name;
@ManyToMany(fetch = FetchType.LAZY,
cascade = {
CascadeType.PERSIST,
CascadeType.MERGE
},
mappedBy = "cards")
private Set<Deck> decks;
//...
}
【问题讨论】:
标签: mysql sql spring-boot jpa spring-data-jpa