1

我有 3 张桌子:

person (person_id, person_name), 
game (game_id, game_name) 

和链接表

play(person_id, game_id, score).

使用 ActiveJdbc,我使用 many2many 注释,它可以很好地为 1 人获取所有游戏

List<Game> games = person.get(Game.class, "person_id = ?", personId);

我的问题是如何获得价值“分数”?我试过game.getScore()了,但显然没有用

编辑:我想要 1 个人的完整游戏列表。这是我想要的结果

game1 | 21
game2 | 33
game3 | 44

在 SQL 中应该是这样的:

select game.name, play.score
from game join play on (game.game_id = play.game_id)
join person on (game.person_id = person.person_id)
where person_id = 1;
4

1 回答 1

1

可能有不止一种方法可以做到这一点,但这里有一种方法。您可以将多对多关系视为两个一对多关系,其中 Play 是 Person 和 Game 两者的子关系。然后你从不同的角度接近:

List<Play> plays = Play.where("person_id = ?", 1).include(Person.class, Game.class); 

通过使用include(),您还可以优化和运行更少的查询:http: //javalite.io/lazy_and_eager

根据您的查询条件,您可能只有一场比赛:

Game game = plays.get(0).parent(Game.class);
Person = plays.get(0).parent(Person.class);

如果当然,你可以得到你的分数:

int score = plays.get(0).getScore();

希望能帮助到你!

于 2017-02-14T18:01:12.467 回答