JPQL多个联接和集合

问题描述 投票:0回答:1

我有玩家和游戏实体,我试图为每个玩家获得他玩过的所有游戏,以及他已经回答了多少正确答案,但是答案存储在名为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

}
java jpa jpa-2.0
1个回答
0
投票

我会说,问题不是从创建适当的join(可能会解决,也可能不会解决)的技术问题开始的,而是设计缺陷。在这种情况下,使对象模型更接近关系模型会更好。

© www.soinside.com 2019 - 2024. All rights reserved.