我有玩家和游戏实体,我试图为每个玩家获得他玩过的所有游戏,以及他已经回答了多少正确答案,但是答案存储在名为game_playeranswers的第三张表中(这是一个集合),所以我必须选择它并计算正确的答案。 game_playeranswers具有三列game_gameid,playeranswers和qid(问题ID)。
我尝试这样做是为了获得游戏结果和答案集合,它返回了0行,但是X玩了1个游戏。
SELECT KEY(m), VALUE(m) FROM Game g JOIN g.playerAnswers m join g.player p where p.userName ='X'"
Game实体如下
@Entity
@Table()
public class Game {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int gameID;
@ElementCollection
@CollectionTable(joinColumns = @JoinColumn())
@MapKeyJoinColumn(name = "QID")
@Column()
public Map<TypePatternQuestions.Question, Boolean> playerAnswers = new LinkedHashMap<>();
@ManyToMany
private List<Category> choosenCategories = new ArrayList<>();
@ManyToMany
private List<Question> questions = new ArrayList<>();
@Column()
public Timestamp timestamp;
@Column()
public Timestamp gameStart;
@Column()
public Timestamp gameEnd;
@Column()
private int maxNumberOfQuestions;
@ManyToOne()
private Player player;
//Getters and Setters
}
玩家如下
@Entity
@Table()
public class Player {
public Player() {
}
@Id
private String userName;
@OneToMany(mappedBy = "player")
private List<Game> games = new ArrayList<>();
//Getters and Setters
}
我会说,问题不是从创建适当的join
(可能会解决,也可能不会解决)的技术问题开始的,而是设计缺陷。在这种情况下,使对象模型更接近关系模型会更好。