gpt4 book ai didi

postgresql - activejdbc 中的多对多额外字段

转载 作者:行者123 更新时间:2023-11-29 13:20:45 25 4
gpt4 key购买 nike

我有 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);

我的问题是如何获得值“score”?我尝试了 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;

最佳答案

可能有不止一种方法可以做到这一点,但这里是一种方法。您可以将多对多关系视为两个一对多关系,其中 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();

希望对您有所帮助!

关于postgresql - activejdbc 中的多对多额外字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42230309/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com