activejdbc中的多对多额外字段

时间:2017-02-14 15:41:11

标签: postgresql activejdbc javalite

我有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(),但显然没有用

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

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;

1 个答案:

答案 0 :(得分:1)

这可能不止一种方法,但这里是 a 方式。您可以将多对多关系视为两个一对多关系,其中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();
希望它有所帮助!